Mybatis实现DAO层开发
使用Mybatis开发Dao,通常有两个方法,即原始Dao开发方式和Mapper接口代理开发方式。而现在主流的开发方式是接口代理开发方式,这种方式总体上更加简便。我们的课程讲解也主要以接口代理开发方式为主。
一 . Mybatis实现DAO的传统开发方式
传统方式开发DAO 的说明,需求如下:
- 根据用户id查询一个用户信息
- 根据用户名称模糊查询用户信息列表
- 添加用户信息
1. SqlSession的使用分析
SqlSession中封装了对数据库的操作,如:查询、插入、更新、删除等。
通过SqlSessionFactory创建SqlSession,而SqlSessionFactory是通过SqlSessionFactoryBuilder进行创建。
2. SqlSessionFactoryBuilder
SqlSessionFactoryBuilder用于创建SqlSessionFacoty,SqlSessionFacoty一旦创建完成就不需要SqlSessionFactoryBuilder了,因为SqlSession是通过SqlSessionFactory生产,所以可以将SqlSessionFactoryBuilder当成一个工具类使用,最佳使用范围是方法范围即方法体内局部变量。
3. SqlSessionFactory
SqlSessionFactory是一个接口,接口中定义了openSession的不同重载方法,SqlSessionFactory的最佳使用范围是整个应用运行期间,一旦创建后可以重复使用,通常以单例模式管理SqlSessionFactory。
4. SqlSession
SqlSession是一个面向用户的接口, sqlSession中定义了数据库操作方法。
每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能共享使用,它也是线程不安全的。因此最佳的范围是请求或方法范围。绝对不能将SqlSession实例的引用放在一个类的静态字段或实例字段中。
打开一个 SqlSession;使用完毕就要关闭它。通常把这个关闭操作放到 finally 块中以确保每次都能执行关闭。如下:
SqlSession session = sqlSessionFactory.openSession(); try { // do work } finally { session.close(); }
5. 开发UserMaaper.xml映射文件
在UserMapper.xml映射文件中,按照需求开发相关的配置,具体需求如下:
- 根据用户id查询一个用户信息
- 根据用户名称模糊查询用户信息列表
- 添加用户信息
重新配置UserMapper.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="test"> <!--根据id查询--> <select id="findByUserId" parameterType="java.lang.Integer" resultType="com.itheima.domain.User"> SELECT * FROM user WHERE id=#{id} </select> <!--模糊查询--> <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.itheima.domain.User"> SELECT * FROM user WHERE username LIKE '${value}' </select> <!--添加用户--> <insert id="saveUser" parameterType="com.itheima.domain.User"> <selectKey keyColumn="id" keyProperty="id" resultType="java.lang.Integer" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user(username,birthday,sex,address)VALUES(#{username},#{birthday},#{sex},#{address}) </insert> </mapper>
6. 开发UserDao接口及UserDaoImpl实现类
UserD