您的位置:首页 > 数据库

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

2016-07-24 10:30 801 查看


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 from
person 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: