2020-08-11 Mybatis重要对象生命周期、ResultMap结果集映射、日志工厂、log4j使用、分页操作、注解实现功能替代XML文件
生命周期、作用域
SqlSessionFactoryBuilder:只是用来创建SqlSessionFactory,创建完毕后就不需要了
SqlSessionFactory:可以理解为数据库连接池,完整贯穿整个应用运行期间,不可丢弃创建
SqlSession:相当于数据库连接请求,每次需要操作数据库就用一次,用完马上关闭,相当于释放,避免并发问题
而SqlSession每一次连接Mapper,都在处理一个业务
ResultMap结果集映射
专门用于解决数据库字段和属性名不一致的问题。
解决方法一:可以在SQL中直接用别名
解决方法二:在Mapper.xml文件中,直接不用resultType,而使用resultMap
<resultMap id="UserMap" type="User"> <result column="pwd" property="password"/> </resultMap> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select>
日志工厂
如果一个数据库操作出现异常,需要排错
问题:怎么打印SQL?
在Settings中可以进行设置,主要有STDOUT_LOGGING标准输出,可以不用配直接使用
另外一个就是LOG4J
<!-- 记住一定要放在properties和typeAliases标签中间,有先后顺序设定的 --> <settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
这个是标准的日志工厂实现
Log4j讲解
上面那个是标准工厂实现,但是Log4j需要导包等步骤
建立log4j.properties文件,然后填入内容
测试类中:
导包:
import org.apache.log4j.Logger;
根据不同的情况,使用其日志打印信息:
public static Logger logger = Logger.getLogger(UserMapper01.class); @Test public void test(){ //通过工具类获得sqlsession对象 SqlSession sqlSession = MybatisUtils.getSqlSession(); MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); List<User> Userlist = userMapper.getUserList(); logger.info(Userlist); logger.debug(Userlist); logger.error(Userlist); for (User user : Userlist) { System.out.println(user); } //关闭sqlsession sqlSession.close(); }
Limit分页
分页主要是减少数据的处理量
select * from user limit 0,5;
//接口中: List<User> getUserByLimit(Map<String,Integer> map); //Mapper.xml中: <resultMap id="UserMap" type="User"> <result column="pwd" property="password"/> </resultMap> <select id="getUserByLimit" parameterType="map" resultMap="UserMap"> select * from mybatis.user limit #{startIndex},#{pageSize} </select> //测试方法: public void getUserBylimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String,Integer> map = new HashMap<String,Integer>(); map.put("startIndex",0); map.put("pageSize",2); System.out.println(map); List<User> list = userMapper.getUserByLimit(map); for(User user : list){ System.out.println(user); } sqlSession.close(); }
尤其注重Mapper.xml中的标签名参数:
一)、parameterType代表了参数的类型。它是通过HashMap的形式传入了两个键值对,代表limit方法的下标
二)、resultMap代表返回结果的映射,因为返回结果的类型名和数据库不一样,所以用了ResultMap来映射,UserMap是在UserMapper中配置的ID,注意看
RowBounds分页
是面向对象思想做的,基本不会使用,已淘汰
直接创建RowBounds类,使用方法来进行实现,可以直接点进方法看使用方法
分页插件
Mybatis PageHelper
使用注解执行整个查询过程
@select(“select * from user”)
这里底层主要是使用反射的机制来读取接口的方法、参数、执行体等等,这样就做完了全部功能
但是使用注解,对于参数、返回值等操作就很会很麻烦,复杂的SQL语句还是要用XML配置文件来使用
记得一定要在核心配置文件中进行配置
<mappers> <mapper resource="com/wang/Dao/UserMapper.xml"/> </mappers> <mappers> <mapper class="com.wang.Dao.UserMapper"/> </mappers>
静态代理/动态代理
- mybaits(查询与别名、日志框架显示sql语句、对象属性和数据库表字段不匹配resultMap使用、mysql数据查询分页、执行sql和存储过程、动态SQL语句)
- mybatis 使用resultMap实现数据库的操作
- MyBatis之使用resultMap实现高级映射
- MyBatis之使用resultMap实现高级映射
- Mybatis04-结果集映射、日志工厂和分页
- MyBatis的ResultMap使用方法,对象关联写法
- mybatis使用association的resultMap方式进行映射少数据问题
- 使用mybatis的resultType="Map"可省去new返回值对象
- mybatis中一对多,一对一写法,resultMap的用法以及关联结果集映射
- MyBatis Review——使用resultType和resultMap实现一对一查询
- Spring3.0 + 自定义注解实现操作日志记录功能
- 使用MyBatis对表执行增删改查操作——基于注解的实现
- mybatis使用resultMap实现多对多查询 (需求:商品信息和订单明细有多对多的关系)
- Mybatis单表自动映射;使用<resultMap>设置映射结果集;多表查询
- 使用Aop面向切面技术实现记录详细操作日志功能
- SSM全注解方式使用PageHelper实现分页查询(日志为例)
- Oracle使用MyBatis中RowBounds实现分页查询功能
- [置顶] 使用struts拦截器+注解实现网络安全要求中的日志审计功能
- MyBatis使用 resultMap的association 标签实现懒加载
- MyBatis第二讲学习笔记 ,使用MyBatis对表执行增删改查操作——基于注解的实现