Mybatis框架运行机制(增删改查,一对一,一对多,日志系统,单元测试,版本控制,缓存,动态Sql)
来源:互联网 发布:java 集合框架详解 编辑:程序博客网 时间:2024/05/22 06:23
Mybatis:
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>
- Mybatis框架运行机制(增删改查,一对一,一对多,日志系统,单元测试,版本控制,缓存,动态Sql)
- MyBatis增删改查、分页、一对一、一对多
- MyBatis增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
- (2) MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
- (2) MyBatis学习之简单增删改查操作、MyBatis存储过程、MyBatis分页、MyBatis一对一、MyBatis一对多
- hibernate 一对多 一对一 ,多方与一方增删改查测试结果
- maven搭建项目--实现mybatis增删改差、一对多及一对一关系
- Hibernate框架运行机制(增删改查,自动生成表,query接口,criteria接口,关系映射,缓存)
- MyBatisMyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作
- MyBatisMyBatis存储过程、MyBatis分页、MyBatis一对多增删改查操作
- Hibernate一对多增删改查
- Hibernate一对多增删改查
- hibernate一对多增删改查
- mybatis动态表增删改查
- MyBatis框架学习之增删改查
- MyBatis框架增删改查(Oracle数据库)
- MyBatis框架实现简单增删改查
- 利用mybatis实现增删改查 的小项目,单表,双表一对多,
- hdu 5750 Dertouzos(数论,打表,暴力)
- 多线程 —— 使用代码显式加锁
- python 增加csdn访问量升级
- 红黑树分析
- windows程序设计学习笔记--动态链接库
- Mybatis框架运行机制(增删改查,一对一,一对多,日志系统,单元测试,版本控制,缓存,动态Sql)
- python: ()&[ ]
- Linux系统调用:进程的终止
- POJ 2785 4 Values whose Sum is 0二分入门
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
- eclipse反编译插件jad环境配置
- Sudoku Solver
- 史上最具核心内容的五子棋核心代码------verision1.0
- 挑战Android:Cyanogen缘何失利?