mybits
mybits配置
链接:https://pan.baidu.com/s/11-oQZgSosdcvUiEMxmRMkA?pwd=msdt
提取码:msdt

Mybits入门
1.mybits使用
1.创建工程
2.导入依赖
3.创建配置文件

mybatis默认使用log4j作为输出日志信息
4.SqlMapConfig.xml
在classpath下创建SqlMapConfig.xml

SqlMapConfig.xml是mybatis核心配置文件,上边文件的配置内容为数据源、事务管理

--sql已经编写--
加载映射文件

SQL使用代码


使用sql语句


如上mybits-帮我们简化了链接的创建和sql语句的生成
如图->想执行sql->会话工厂->给予一个会话
2.占位符
{} 实现向占位符添加值-自动进行java类型和jdbc类型转换-可以防止sql注入-可接收简单类型值和pojo属性值
¥s{}拼接sql传=不进行类型转换=
3.parameterType-resultType
parameterType-传入的参数类型
resultType返回值类型
4..selectOne和selectList
selectOne查询一条记录
selectList查询多条记录
5.mybits-主键添加

使用
SqlSession.insert("test.insertUser",user);
selectkey->select Last_INSERT_ID--用户添加后自动返回主键-
uuid生成主键

6.mybits-删除

sqlSession.delete("test.deleteUser",39);
7.mybiits->更新用户

sqlSession.update("test.updateUser",user);
mybits-Dao开发
1.Dao开发配置入门





dao层面-有非常多的重复代码-比如释放资源-拿取selSession-
2.Mapper开发
mapper代理方法(程序员只需要mapper接口(相当 于dao接口))
程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象。

需要一一对应进行映射
也就是mapper-函数映射到xml文件中--需要进行一一对应
3.mapper代理
xml定义


加载


---如图--userMapper-来调用方法0由sqlSession-来生成代理对象
代理对象内部调用selectOne或selectList
如果mapper方法返回单个pojo对象(非集合对象),代理对象内部通过selectOne查询数据库。
如果mapper方法返回集合对象,代理对象内部通过selectList查询数据库
mapper接口方法参数只能有一个,系统是否不利于扩展维护。
系统 框架中,dao层的代码是被业务层公用的。
即使mapper接口只有一个参数,可以使用包装类型的pojo满足不同的业务方法的需求。
注意:持久层方法的参数可以包装类型、map。。。,service方法中建议不要使用包装类型(不利于业务层的可扩展)。
4.l配置
SqlMapConfig.xm

properties属性
将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties


settings全局参数配置


类型别名
1.普通类型别名
如果在指定类型时输入类型全路径,不方便进行开发,可以针对parameterType或resultType指定的类型定义一些别名,在mapper.xml中通过别名定义,方便开发。
2.自定义别名
自定义别名-当我们参数的pojo大部分一致的时候 定义别名可以减少代码繁杂


批量别名-常用-扫描po文件 给所有pojo注册别名
3.mybits 类型处理器
typeHandlers
jdbc类型和java类型转换
例子
IntegerTypeHandler Integer,int 任何兼容的数字和整型
4. mappers 映射配置
-
通过resource加载单个映射文件

-
通过mapper接口加载单个mapper

按照上边的规范,将mapper.java和mapper.xml放在一个目录 ,且同名

3 . 批量加载mapper(推荐使用)

4.输入映射
通过parameterType指定输入参数的类型,类型可以是简单类型、hashmap、pojo的包装类型
总结



Mybits高级

1.一对一查询
查询订单信息,关联查询创建订单的用户信息
sql语句
select orders.*, USER.username,
USER.sex,
USER.address FROM ORDERS,USER WHRE ORDERS.USER_ID=USER.ID;
select orders.*, USER.username,
USER.sex,
USER.address FROM ORDERS JOIN USER ON ORDERS.USER_ID=USER.ID;
实现该查询
1.创建pojo
2.mapper
<SELECT ID="FINDorderUser" resultType='pojo'>
select orders.*,user.username,user.sexmuser.address from orders,user WHRE ORDERS.USER_ID=USER.ID;
</lelect>
3.mapper.java

这个时候-只需要获取即可使用该sql语句
-- 使用resultMap映射的思路
使用resultMap将查询结果中的订单信息映射到Orders对象中,在orders类中添加User属性,将关联查询出来的用户信息映射到orders对象中的user属性中。

定义resultMap

S定义


2.一对多查询
查询订单及订单明细的信息。
SELECT
orders.*,
USER.username,
USER.sex,
USER.address,
orderdetail.id orderdetail_id,
orderdetail.items_id,
orderdetail.items_num,
orderdetail.orders_id
from
orders,
USER,
orderdetail
whrer
orders.user_id = user.id AND orderdetail.orders_id=orders.id
使用resultType将上边的 查询结果映射到pojo中,订单信息的就是重复
要求:
对orders映射不能出现重复记录。



map->映射关系
将数据库字段->对象的字段中
同时会指定映射的属性和集合中


3.多对多查询案例
查询主表是:用户表
关联表:由于用户和商品没有直接关联,通过订单和订单明细进行关联,所以关联表:
orders、orderdetail、items

映射



resultmap总结

延迟加载
如果查询两张表-如果只需要查询一张表即可满足条件的情况下-那么就不需要查询下一章表
关联查询->单表查询
1.使用association实现延迟加载
查询订单并且关联查询用户信息
案例

<resultMap type="orders" id"map">
<!--对订单信息进行映射配置 -->
<id column="id" property="id"/>
<result column="user_id" property="userId"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<!-- 实现对用户信息进行延迟加载
select:指定延迟加载需要执行的statement的id(是根据user_id查询用户信息的statement)
要使用userMapper.xml中findUserById完成根据用户id(user_id)用户信息的查询,如果findUserById不在本mapper中需要前边加namespace
column:订单信息中关联用户信息查询的列,是user_id
<association property="user" javaType="user"
select="cn.itcast.mybatis.mapper.UserMapper.findUserById" column="user_id">
</association>
</resultMap>


也就是-我们编译器没有访问到user内容就不会去加载吗 2.延迟加载配置
mybits默认没有开启延迟加载-需要自己手动开启

3.

缓存
1.一级缓存
第一层查询-如果没有-从数据库查 再添加进缓存中
sqlSession去执行增删改-清空一级缓存
2次发起->缓存有直接返回
redis缓存思路
mybits默认支持一级缓存
Sqlsession sqlsession=sqlsessionfactry.ioensession();
UserMapper userMapper=sqlsession.getMapper(usermapper.class);
User user=usermapper.finduserbyid(1);第一层查询-如果没有-从数据库查 再添加进缓存中
User user=usermapper.finduserbyid(1); 2次发起->缓存有直接返回
usermapper.updateuser(user1);sqlSession去执行增删改-清空一级缓存
一级缓存应用

2.2级缓存

二级缓存范围大-多个sqlsession可以共享一个usermapper二级缓存区域
二级缓存区域是按照namespace分-其他不同的mapper也有自己的二级缓存区域
一个namespace的mapper都有一个二缓存区域,两个mapper的namespace如果相同,这两个mapper执行sql查询到数据将存在相同 的二级缓存区域中。
开启二级缓存
mybaits的二级缓存是mapper范围级别,除了在SqlMapConfig.xml设置二级缓存的总开关,还要在具体的mapper.xml中开启二级缓存。

mybits整合ehcache
mybits整合ehcache
ehcache是一个分布式缓存框架
缓存的数据-进行集中管理-分布式集中访问 整合方法
mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发即可。
mybatis和ehcache整合,mybatis和ehcache整合包中提供了一个cache接口的实现类。

ehcache配置


二级应用场景

Mybits整合Spring
1.bean配置

bean的配置
user.xml




以上bean去读xml配置
然后mybits去注册 在接口实现类进行查询
之后注册为bean
后续直接使用
2.mapper
还是要在同级目录以下
注册为bean 扫描xml文件


本文来自博客园,作者:逆向狗,转载请注明原文链接:https://www.cnblogs.com/Agtw/p/18186037