MyBaits框架
- 持久层框架
- Apache 的开源项目
- ORM 对象关系映射
- 持久化 把数据保存到硬盘中
一、Mybaits是什么?
- 一个支撑框架
- 以映射sql语句ORM方式来做数据库持久化操作
二、为什么使用
-
jdbc
- 重复性代码较多
- 封装对象麻烦
- 性能低–>要提高效率,需要自己写缓存
-
mybaits(特点)
-
没有太多的重复代码
-
封装对象方便(不用手动处理参数)
-
性能高
-
sql统一管理,维护方便(把sql语句从java代码中抽取出来)
-
90%企业在使用
-
三、mybaits的crud
- 抽取工具类
public enum MyBatisUtils { INSTANCE; private static SqlSessionFactory sqlSessionFactory; static { Reader reader = null; try { //读取配置文件 reader = Resources.getResourceAsReader("MyBatis-Config.xml"); sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { //打印堆栈信息 e.printStackTrace(); throw new RuntimeException("解析配置文件出错"+e.getMessage()); } } public SqlSession getSqlSession(){ return sqlSessionFactory.openSession(); } }
- 新增
//调用方法 namespace+id
sqlSession.insert("xx.xxx.dao.IUserDao.save", user);
//提交事务
sqlSession.commit();
- 修改
//调用方法 namespace+id
sqlSession.insert("xx.xxx.dao.IUserDao.update", user);
//提交事务
sqlSession.commit();
- 删除
//调用方法 namespace+id
sqlSession.insert("xx.xxx.dao.IUserDao.delete", user);
//提交事务
sqlSession.commit();
- 查询
//调用方法 namespace+id
User user = sqlSession.selectOne("xx.xxx.dao.IUserDao.queryOne", id);
return user;
//查询所有
List<User> users = sqlSession.selectList("xx.xxx.dao.IUserDao.queryAll");
return users;
四、细节
4.1 获取主键
<!--
useGeneratedKeys:使用主键
keyColumn:数据库id列
keyProperty:程序里面User类的属性
-->
<insert id="save" parameterType="cn.itsource.domain.User"
useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into t_user(name) values(#{name})
</insert>
4.2 log4j日志
- 日志级别:
- OFF(什么都不输出关闭日志信息)<FATAL<ERROR<WARN<INFO<DEBUG<TRACE < ALL (最低级别 什么信息都要输出)
- 配置文件 log4j.properties
```
# 日志输出级别,输出到控制台
log4j.rootLogger=ERROR, stdout
# 日志什么都不打印
#log4j.rootLogger=NONE
# 打印日志级别
log4j.logger.cn.hx=TRACE
# 输出到控制台的配置信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 输出到控制台的格式类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
```
4.3 mybaits别名
- 内置别名,上网查询
- 自定义别名
```
<typeAliases>
<!-- 配置单独类-->
<typeAlias type="xx.xxx.domain.User" alias="user"></typeAlias>
<!--配置包-->
<package name="cn.itsource.domain"></package>
</typeAliases>
```
4.4 #和$的区别
- $ {id} 找的类参数类的里面 getId这个方法,如果有 就不会报错,没有就会报错
- '# 占位符,$ 拼接字符串形式
- $一般使用在limit+orderby上面 其他情况下 就是使用#
五、批量操作数据
- 删除
<!--
delete from t_user where id in ( ? , ? ) 批量删除:
collection="list":传入的list,相当于map的key,通过list得到传入的整个集合的值;
index="index" :每次循环的索引
item="id" :每次循环的这个值
open="(" :以什么开始
separator=",":分隔符
close=")":以什么结束
-->
<!--批量删除-->
<delete id="deleteBatch" parameterType="list">
delete from t_user where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
- 新增
<!--批量新增-->
<!--insert into t_user(name) values ('xxx'),('yyyy')-->
<insert id="saveBatch" parameterType="list">
insert into t_user(name) values
<foreach collection="list" item="user" separator=",">
(#{user.name})
</foreach>
</insert>
- 修改
<!--批量修改-->
<!--update t_user set name=?where id=(?,?)-->
<insert id="saveBatch" parameterType="list">
insert into t_user(name) values
<foreach collection="list" item="user" separator=",">
(#{user.name})
</foreach>
</insert>
六、动态sql
<sql id="whereSql">
<if test="name!=null">
and name like #{name}
</if>
<if test="age!=null">
and age = #{age}
</if>
</sql>
<!--高级查询方法-->
<select id="queryList" parameterType="userQuery" resultType="User">
select * from t_user
<where>
<include refid="whereSql"></include>
</where>
</select>
来源:CSDN
作者:白马太黑
链接:https://blog.csdn.net/qq_20252399/article/details/103264027