1、先在pom.xml文件中导入Mybatis的jar包与mysql-connector-java的jar包(需要在<dependencies>标签之中)
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.5</version> </dependency>
2、在resource文件夹下编写mybatis-config.xml文件(即mybatis核心设置文件),该文件用于设置mybatis使用时的一些设置.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC"/> <property name="username" value="root"/> <property name="password" value="123456"/> </dataSource> </environment> </environments> <mappers> <!-- 这是第一种注册mapper方法,通过resource路径来绑定--> <!-- <mapper resource="com/com.kuang/dao/UserMapper.xml"/>--> <!-- 这是第二种注册方法,通过包路径来注册,但是要求接口类和xml实现类同名--> <!-- <mapper class="com.com.kuang.dao.UserMapper"></mapper>--> <!-- 这是第三种注册方法,直接注册该报下的所有mapper,但是要求接口和实现类同名(和mapper标签的class属性来注册相同)--> <mapper class="com.kuang.dao.teacherMapper"></mapper> <mapper class="com.kuang.dao.studentMapper"></mapper> </mappers> </configuration>
3、然后编写MybatisUtils类用于在程序中获取Sqlsession对象.(放在untils包下)
package com.kuang.utils; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException; import java.io.InputStream; public class MybatisUtils {//工具类,用于返回该mybatis项目的核心配置文件的SqlSession对象 private static SqlSessionFactory sqlSessionFactory; static{ try { String resource = "mybatis-config.xml";//获取mybatis的核心配置文件名 InputStream inputStream = Resources.getResourceAsStream(resource);//使用mybatis的核心配置文件名创建一个输入流 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); //创建一个sqlSessionFactory(数据库会话工厂,用于创建SqlSession对象的),使用mybatis的核心配置文件名创建的字节输入流创建一个SqlSessionFactory }catch(IOException e) { e.printStackTrace(); } } public static SqlSession getSqlSession(){//用于获取SqlSession对象 return sqlSessionFactory.openSession(); } }
4、接下来就可以正式使用Mybatis框架来进行数据库操作了
我们可以编写一个实体类javaBeen(pojo类)来与数据库中的表一一对应.javaBeen即指成员变量都为private修饰类型(私有).通过get和set方法来对该类成员变量进行操作的类,并且有无参构造函数
如User类:
package com.kuang.pojo; //pojo包,其中存放的类都是实体类 public class User { private int id; private String name; private String pwd; public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } public User() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", pwd='" + pwd + '\'' + '}'; } }
要注意,该实体类的成员变量类型、名字必须和数据库该表中的数据类型、名字一一对应,如数据库中数据类型是varchar则该成员变量类型就为String.
5、接下来就可以开始编写对数据库数据的操作了
package com.kuang.dao; import com.kuang.pojo.User; import java.util.List; public interface UserMapper { public List<User> getUserList();//用于获取用户列表的方法 public User getGivenUser(int id);//获取特定用户的方法 public int addUser(User user); int deleteUser(int id);//根据id删除指定对象 int updateUser(User user);//更新对象 }
Mybatis实现用户操作需要先定义个数据操作接口,然后再编写对应的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.com.kuang.dao.UserMapper"> <!-- id是要实现方法的方法名,resultType是该方法的返回值--> <select id="getUserList" resultType="com.com.kuang.pojo.User"> select * from mybatis.user </select> <select id="getGivenUser" parameterType="int" resultType="com.com.kuang.pojo.User"> select * from mybatis.user where id=#{id} </select> <insert id="addUser" parameterType="com.com.kuang.pojo.User"> insert into mybatis.user(id,name,pwd) values (#{id},#{name},#{pwd}) </insert> <delete id="deleteUser" parameterType="int"> delete from mybatis.user where id=#{id} </delete> <update id="updateUser" parameterType="com.com.kuang.dao.UserMapper" > update mybatis.user set name=#{name},pwd=#{pwd} where id=#{id} </update> </mapper>
6、我们可以创建测试类来测试数据操作是否可以正常操作
package com.kuang.dao; import com.kuang.pojo.User; import com.kuang.utils.MybatisUtils; import junit.framework.TestCase; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.util.List; public class UserMapperTest extends TestCase { @Test //这是测试类,用于测试是否能够正常使用 public void testGetUserList() { //1、获得了SqlSession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); try{ UserMapper userMapper = sqlSession.getMapper(UserMapper.class);//使用class属性来获取类的class对象, List<User> userList = userMapper.getUserList();//执行语句 for(User user :userList) { //循环输出语句 System.out.println(user); } User givenUser = userMapper.getGivenUser(6);//如果在表中没有查询到该用户则返回null System.out.println(givenUser); }catch(Exception e){ e.printStackTrace(); }finally{ sqlSession.close();//关闭sqlSession流,非常重要,每次使用完后都需要记得关闭 } } @Test public void testAddUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class);//获取接口的class mapper.addUser(new User(5,"小王","1234561"));//插入数据 sqlSession.commit();//提交事务,不然数据库中的数据不会更新 sqlSession.close();//关闭sqlSession流 } @Test public void testupdateUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.updateUser(new User(5,"小张","12312321")); sqlSession.commit(); sqlSession.close(); } @Test public void testdeleteUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); mapper.deleteUser(5); sqlSession.commit(); sqlSession.close(); } }
想要使用自己编写的数据操作方法:
1、先调用MybatisUtils的getSqlSession()方法获取Sqlsession对象.
2、调用获得的SqlSession对象使用它的GetMapper(实现操作接口名.class)获取Mapper对象
3、直接使用Mapper对象调用该方法.(如果调用的是update、insert、delete方法需要使用SqlSession.commit()把事务提交更新数据)
4、使用完毕记得将SqlSession关闭,使用SqlSession的close()方法.