Mybatis框架运行机制(增删改查,一对一,一对多,日志系统,单元测试,版本控制,缓存,动态Sql)

来源:互联网 发布:java 集合框架详解 编辑:程序博客网 时间:2024/05/22 06:23

Mybatis:

对JDBC是一个轻量级的封装。一个持久层一个框架
支持普通SQL查询,存储过程和高级映射的优秀持久层框架
可以使用简单的XML或注解用于配置和原始映射,将接口和java的POJO(plai old java objects,普通的java对象)映射成数据库中的记录。
1.步骤:
1>.导包 mybatis.jar + mysql-connector-java.jar

2>.在src目录下创建conf.xml文件(mybatis-conf.xml)
     配置数据库连接信息
     注册mapper.xml文件(将实体类的映射文件写好之后,加入)

3>.定义数据表对应的实体类

     定义操作数据表的SQL映射文件xxxMapper.xm;

1>.写dtd头文件

2>.namesapce(映射文件的路径)

3>.语句中的id为唯一

4>.parameterType参数类型

5>.resultType 返回的结果集类型

4>.测试

1>.创建sqlSession工厂:使用类加载器加载mybatis配置文件→ 构建sqlSession的工厂

SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build("mybatis-conf.xml")

2>.使用session.getMapper(Dao层.class)

3>.测试

2.常识

mybatis-config.xml配置文件中注册文件

1>.resource用于注册xxxMapper.xml文件

2>.class 注册xxx<apper映射接口(IBookDao)

创建SqlSession工厂时(基于注解,基于xml)

1>xxxMapper(IBookDao) mapper(BookDao)=SqlSession.getMapper(xxxMapper.class)

对数据表CRUD一共三种方法

1>.配置文件+数据表实例+xxxMapper.xml+SqlSessionFactory+xxxDao

测试时候通过session.getMapper(xxxDao.class)

2>.配置文件+数据表实例+SqlsessionFactory+xxxDao(里面有注解)→注解

测试时候通过session.getMapper(xxxDao.class)获得

3>.配置文件+数据表实例+jdbc.properties(需要在配置文件中引用,用${}获得参数)+xxxMapper.xml+SqlSessionFactory+xxxDao(接口方法)

测试时候通过session.getMapper(xxxDao.class)获得

3.一对一查询,一对多查询

因为获得不到主键表的数据

1>.把语句整合在一起,使用两个构造resultMap

2>.把语句分开写,使用外键关联查询

<!DOCTYPE mapper    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"    "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.hellojava.dao.IPersonDao"><!-- 第一种方法 --><resultMap type="Person" id="personResult"><id column="perId" property="perId"/><result column="perName" property="perName"/><association property="card" javaType="Card"><id column="cardId" property="cardId"/><result column="cardNumber" property="cardNumber"/></association></resultMap><select id="loadPersonById" parameterType="int" resultMap="personResult">select P.perId,P.perName,C.cardId,C.cardNumber fromperson P,card C where P.perId=C.cardId and P.perId=#{perId}</select><!-- 第二种方法 --><resultMap type="Person" id="ResultPerson"><id column="perId" property="perId"/><result column="perName" property="perName"/><association property="card" javaType="Card"select="loadCard" column="perId"></association></resultMap><select id="loadPerson" parameterType="int" resultMap="ResultPerson">select * from person where PerId=#{perId}</select><select id="loadCard" parameterType="int" resultType="Card">select * from card where cardId=#{cardId}</select></mapper>
4.边缘问题
1>.日志系统

查看bug error fatal(重大错误) info trace

可以在log4j.properties更改配置,然后查找对应的日志

2>.测试(单元测试)

继承TestCase,使用断言进行测试(绿,红进度条)

3>.版本控制 SVN(服务器,客户端 eclipse插件)

开发时候,小组各自上传自己文件

5.缓存

一级缓存基于session,清楚缓存:

1>.clear() 2>.close() 3>.update(当数据发生更改也会清楚,其实是更新对应的缓存)

二级缓存基于Mapper文件,cache配置:

1>.eviction剔除的算法(先进先出)FIFO

2>.flushInterval 刷新的频率 1000

3>.readonly 是否只读 false

4>.size 缓存默认大小 10

5>.type 缓存中存储的数据类型

测试二级缓存,使用两个不同的SqlSession对象去执行相同查询条件的查询,第二次查询时不会再发生Sql语句

而是从缓存中取出数据。

6.动态Sql

1>.添加集合List 使用foreach遍历 separator分隔符

2>.更新数据 使用if判断 拼接语句

3>.模糊查询 在查询条件添加%(mapper文件里面只能bind一个模糊条件,其他会得不到参数)

<mapper namespace="com.hellojava.dao.IBookDao"><insert id="saves" parameterType="java.util.List">insert into book(bookName,bookAuthor,bookPrice,bookInfo) values<foreach collection="list" item="b" separator=",">(#{b.bookName},#{b.bookAuthor},#{b.bookPrice},#{b.bookInfo})</foreach></insert><update id="update" parameterType="Book">update book<trim prefix="set" suffixOverrides=","><if test="bookName!=null">bookName=#{bookName},</if><if test="bookAuthor!=null">bookAuthor=#{bookAuthor},</if><if test="bookPrice>0">bookPrice=#{bookPrice},</if><if test="bookInfo!=null">bookInfo=#{bookInfo},</if></trim><where>bookId=#{bookId}</where></update><select id="load" parameterType="Book" resultType="Book">select * from book<bind name="bname" value="'%' + _parameter.getBookName() + '%'"/><where><trim suffixOverrides="AND|OR"><if test="bookId>0">bookId=#{bookId} and</if><if test="bookName!=null">bookName like #{bname} and</if><if test="bookAuthor!=null">bookAuthor like #{bookAuthor} and</if></trim></where></select></mapper>
7.mybais-config.xml

<?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><properties resource="jdbc.properties"></properties><typeAliases><package name="com.hellojava.entity"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"></transactionManager><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><mappers><mapper resource="com/hellojava/mapper/BookMapper.xml"/></mappers></configuration>



0 0