小小接触了下 mybatis,没有和其它框架集成,单独使用了下,感觉还是蛮强大的,学习曲线也比较低。因为文档也比较丰富吧,所以遇到问题也很容易解决。
一、mybatis基本介绍:三类二文件
三类:
SqlSessionFactoryBuilder 用于创建 SqlSessionFactory ,在方法体或类到处实例化使用
SqlSessionFactory 用于创建SqlSession ,属于重量级组件,生命周期是整个应用,所以应该只创建一次
SqlSession 用于数据库操作实例,每个线程应该有单独的SqlSession实例,线程不安全,使用后及时关闭,回收资源
二文件:
配置文件:配置数据源信息 和 数据库优化配置等信息
映射文件:可读性和可拓展性需要,针对不同数据表对象操作有一个映射文件,存放各种数据库操作SQL语句
二、mybatis强大处
① 结果映射
经常有业务需求,进行多表查询,这样单纯的OM就不能满足需求,mybatis提供resultMap查询结果类型,按照下面配置结构,在select语句中配置resultMap="userResultMap",则可以得到实例对象。
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id" />
<result property="username" column="user_name"/>
<result property="password" column="hashed_password"/>
</resultMap>
②动态SQL
当进行条件查询时,有时业务需求为这样,当一个指定查询条件为空,则查询全部信息,不为空,这查询该条件下的结果,针对这种情况,mybatis提供了强大的动态SQL,可以在SQL文中,嵌入像IF,CHOOSE,WHEN等判断语句:此时注意,查询参数类型 《1》参数类型为映射对象时,判断条件应该为对应的属性,这个可以很好理解。《2》参数类型为普通数据类型时,则应该使用map类型传入(其它方式还没有用成功过),以key-value形式传入,这样key为判断条件,同事赋值也应该以key处理,举例说明:
有如下操作需要:
- Map<String, String> map = new HashMap<String, String>();
- map.put("aaa","%test%");
- List<UserInfo> list = dao.query(map);
- <select id="query" parameterType="map" resultMap="userInfoMap">
- <if test="aaa != null">and a.UserName like #{aaa}</if>
- </select>