Java-Mbatis框架实现最基本的增删改(一)

运行环境:

      数据库:Mysql

      数据库管理工具:Navicat for MySQL

      Java IDE:MyEclipse

      框架:Mybatis-3.2.8

大三狗暑假被学校要求做项目,后端要用到Java的SSM框架(Spring,Spring MVC,Mybatis)

下面简单用Mybatis框架实现增删改操作。


1.先用MyEclipse新建一个Web项目,然后导入JDBC包和Mybatis-3.2.8包


          

扫描二维码关注公众号,回复: 2556520 查看本文章

      项目结构                            导入两个包后

2.创建相应的包和创建mybatis-config.xml文件


接下来要编写mybatis-config.xml文件,这个文件怎么写?我们查看一下Mybatis的官网


把示例的代码负责到mybatis-config.xml文件中,并根据自己的数据库把参数修改一下。


数据库名:shop

encironments标签下可以配置多个数据库,可以适应多种环境。

例如:开发,测试和生产环境需要不同的配置

3.编写SQLSessionUtil类

package com.ly.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class SQLSessionUtil {
	
	  private static SqlSessionFactory  factory=null;
      // static
	  static Reader read=null;
	  
	  static{
		   String config="mybatis-config.xml";
		   try {
			 read= Resources.getResourceAsReader(config);
		} catch (IOException e) {
			e.printStackTrace();
		} 
	  }
	  
	  /**
	   * 
	   * @return
	   * 单例设计模式,只得到一个工厂对象
	   */
	  private static  SqlSessionFactory  getSqlSessionFacory(){
		   if(factory==null){
			   factory =new SqlSessionFactoryBuilder().build(read);
		   }
		    return factory;
	  }
	  
	  
	  /***
	   *  封装一个得到 SqlSession的对象
	   *  
	   */
	  
	  public  static  SqlSession getSqlSession(){
		  return getSqlSessionFacory().openSession();
	  }
	
	
}

这里用到了单例模式,一般都是只用到一个工厂对象。

4.在包entity下编写User.java实体


对应的实体类:

package com.ly.entity;

/***
 * 
 * @author HDLB601T1 封装用户数据
 */
public class User {

	private int id;
	private String user;
	private String pwd;
	/**
	 * status:1代表正常 2代表离职
	 */
	private int status;
	/**
	 * 角色: 1:普通人员 2:管理员 3:超级管理员
	 */
	private int role;

	public User(int id, String user, String pwd, int status, int role) {
		super();
		this.id = id;
		this.user = user;
		this.pwd = pwd;
		this.status = status;
		this.role = role;
	}

	public User() {
		super();
	}

	public User(String user, String pwd, int status, int role) {
		super();
		this.user = user;
		this.pwd = pwd;
		this.status = status;
		this.role = role;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public int getStatus() {
		return status;
	}

	public void setStatus(int status) {
		this.status = status;
	}

	public int getRole() {
		return role;
	}

	public void setRole(int role) {
		this.role = role;
	}

	@Override
	public String toString() {
		return "User [id=" + id + ", user=" + user + ", pwd=" + pwd + ", status=" + status + ", role=" + role + "]";
	}

}

5.在mapping包下编写user.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.ly.mapping">
 
  <resultMap type="com.ly.entity.User" id="UserList">
    <id column="id" property="user" />
    <result column="user" property="user"/>
    <result column="pwd" property="pwd"/>
    <result column="status" property="status"/>
    <result column="role" property="role"/>
  </resultMap>
 
   <!-- 通过id查询操作 -->
   <select id="getUserById" resultType="com.ly.entity.User" parameterType="int">
        select * from user where id=#{id}
   </select>
   
   <!-- 查询所有数据操作 -->
   <select id="listAll" resultMap="UserList">
      select * from user
   </select>
   
   <!-- 更新操作 -->
   <update id="updateUser" parameterType="com.ly.entity.User">
      update user set user=#{user},pwd=#{pwd},status=#{status},role=#{role} where id=#{id}
   </update>
   
   <!-- 删除操作 -->
   <delete id="deleteById" parameterType="int">
     delete from user where id=#{id}
   </delete>
   
   <!-- 插入操作 -->
   <insert id="insertUser" parameterType="com.ly.entity.User">
     insert into user values(null,#{user},#{pwd},#{status},#{role})
   </insert>
   
</mapper>

然后再刚刚“先不用理”那里把mappers改成如下:

<mappers>

<mapper resource="com/ly/mapping/user.xml" />

</mappers>

6.用单元测试来测试是否能对数据库操作成功

在test包下创建TestMybatis.java类。代码如下:

package test;

import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import com.ly.entity.User;
import com.ly.util.SQLSessionUtil;

public class TestMybatis {

	@Test
	public void test() {

		// 将主配置文件进行解析
		String config = "mybatis-config.xml";
		// 用反射机制
		InputStream is = TestMybatis.class.getClassLoader().getResourceAsStream(config);
		// 得到工厂对象
		SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
		// 从工厂中拿到我们连接在sqlsession对象
		SqlSession sqlSession = factory.openSession();
		Object object = sqlSession.selectOne("getUserById", 2);
		System.out.println(object);
	}

	@Test
	public void testInsert() {
		SqlSession sqlSession = SQLSessionUtil.getSqlSession();
		User user = new User("ly", "123", 1, 1);
		int num = sqlSession.insert("insertUser", user);
		sqlSession.commit();
		if (num > 0) {
			System.out.println("success");

		}

	}

	@Test
	public void test3() {

		try {
			SqlSession sqlSession = SQLSessionUtil.getSqlSession();
			User user = new User(2, "ly", "ly", 1, 1);
			int num = sqlSession.update("updateUser", user);
			sqlSession.commit();
			if (num > 0) {
				System.out.println("success");
			} else {
				System.out.println("false");
			}
		} catch (Exception e) {
			System.out.println(e);
		}
	}
	
	@Test
	public void test5(){
		SqlSession sqlSession=SQLSessionUtil.getSqlSession();
		Object object=sqlSession.selectList("listAll");
		if (object!=null) {
			List<User> list=(List<User>)object;
			for(User user:list){
				System.out.println(user);
			}
		}
	}

}

此时的整个项目结构


这里我把所有的测试方法都一起执行了,自己测试的时候可以一个个来


代码下载:链接: https://pan.baidu.com/s/189Ezn0Frt6Z9au5vlBOQ-w 密码: sdh8

猜你喜欢

转载自blog.csdn.net/Doctor_LY/article/details/80954980