mybatis自己总结资料
来源:互联网 发布:战列舰炮击的威力知乎 编辑:程序博客网 时间:2024/06/07 01:32
mybatis:
持久层框架
java实现的数据库操作只能是JDBC
mybatis底层也是JDBC
Mybatis前身就是ibatis,是一个支持普通sql查询,存储过程和高级映射的一个优秀的持久层(ORM)框架
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的封装
MyBatis可以向PreparedStatement中的输入参数进行输入映射,将查询的结果集进行输出映射,映射成java对象
总结JDBC的问题
1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁的开启和关闭,浪费资源,影响数据库的性能
解决:使用数据库连接池
2.将sql语句写在java代码中,如果需要修改sql语句需要重新编码,不利于维护
解决:放入到配置文件.xml
3.向Preparedstatement中设置参数的时候也是在java代码中,不利于维护
解决:放入到配置文件中
4.从ResultSet中遍历结果的时候,需要手动映射结果集
解决:将查询的结果集,自动映射成java对象
依赖两个jar包
mybatis自身的
mybatis.jar
数据库的
mysql-jdbc.jar-----mysql
ojdbc.jar----------oracle
两种配置文件:
configuration配置(只有一个)
连接信息
系统的环境信息
mapper配置(有多个)
sql语句
映射信息
configuration配置详解
environments:配置连接的环境,可能有多个,通过default指定是某一个,default的值对应的下面子环境的id值
environment:一个连接的环境,id表示该环境的唯一性标示
transactionManager:事务管理器
JDBC:使用了JDBC的提交和回滚,它依赖于从数据源得到的连接来管理事务的范围
conn.setAutoCommit(false);
conn.commit();
conn.rollback();
MANAGED:这个配置几乎啥都没做,它从来不会提交或者回滚一个连接
它将事务扔给了其他框架来做,自己不管理
dataSource:用于配置连接信息
UNPOOLED:没有连接池
POOLED:有连接池
JNDI:向其他容器要连接
typeAliases:取别名
第一种方式:每一个对象配置一个别名
<typeAlias type="entity.User" alias="user"/>
type:对应的java对象
alias:别名
第二种方式:扫包
<package name="entity"/>
name:需要扫描的包
Mapper配置文件
mapper标签
namespace:一般是包名.类名
select标签
方法的参数:
如果只有一个,正常
如果有多个
方式一:当遇到多条件的时候,将多条件的数据封装成一个对象配置
方式二:在mapper中不配置parameterType,直接写参数的下标,参数在dao层接口中设置
id:方法名,需要与dao层的方法名相同
parameterType:参数的类型
resultType:返回值的类型
查询的时候如果返回值是一个对象的集合,那么配置的resultType就是这个对象
resultMap:另一种映射方式
数据库返回数据与java对象进行映射的配置
sql标签
这个元素可以被用来定义可重用的SQL代码段
insert标签
id:方法名
parameterType:参数类型
保存时需要提交事务
如果想要保存时返回主键,需要加如下配置
useGeneratedKeys="true"-----配置保存时返回主键
keyProperty="id" ----------主键所对应的java对象中属性的名字
keyColumn="id" ---------主键所对应的数据库中列名
使用注解的方式代替配置文件
对于简单语句来说,使用注解代码会比较清晰
但是对于复杂语句来说,会混乱,所以官方并不推荐使用注解的方式、
@select--相当于select标签
@Results(value={
@Result(id=true,property="id",column="user_id"),
@Result(property="username",column="user_username"),
@Result(property="password",column="user_password"),
@Result(property="phone",column="user_phone")
})
@Results:相当于resultMap
id=true:表示是主键
property:java对象属性名
column:数据库字段名
@Options:选项
相当于xml配置中的标签的属性
id name password
select * from t_user where id = ?
select * from t_user where username = ?
select * from t_user where id = ? and username = ?
select * from t_user where username = ? and password = ?
select * from t_user where 1=1 and password = ?
StringBuffer sql = new StringBuffer()
.append("select * from t_user where 1=1")
if(id!=null){
sql.append("and id = ? ")
}
if(name != null){
sql.append("and name = ? ")
}
动态sql
if
choose(when,otherwise)
where
trim
foreach
if:就是一个简单的条件判断,通过if语句我们可以实现某些简单的条件选择查询
只要条件满足会一直添加
choose:相当于jstl中的choose标签
通常与when和otherwise搭配使用
when:当when中的条件满足的时候加入其中的内容
otherwise:当所有的条件都不满足的时候加入其中的内容
只要满足一个条件就不再考虑其他条件
where:简化了sql语句中where中的条件判断
将最终生成的sql语句中添加where关键字
并且将条件部分第一个条件前面的and/or连接条件的关键字自动去除
trim:可以在自己包含的内容中加上某些前缀或者后缀,
也可以把包含的内容部分的首部或者尾部的某些内容去掉
prefix:加前缀
suffix:加后缀
prefixOverrides:忽略首部内容
在忽略首部内容时,如果有多个关键字选择,以|分隔,并且|后面不能有空格
suffixOverrides:忽略尾部内容
set:在包含的语句块前面加上set
如果包含的语句是以逗号结束会把该逗号去掉
foreach:主要用在in语句中,可以在sql语句中进行迭代一个集合
collection:参数的类型,可能有三种值
传入的参数类型的同一种,并且用的是一个List存放,这时候用:list
穿入的参数类型是同一种,并且使用的是一个array数组,这时候用:array
传入的参数类型不同:封装成map
item:相当于var,表示集合中每一个元素进行迭代时的别名
index:指定一个名字,用于表示在迭代过程中,每次迭代的位置
open:表示该语句从什么地方开始迭代,in语句中是以"("开始
close:什么时候结束
separator:表示迭代的数据之间的分隔符
select * from t_user where id in(1,3,5)
持久层框架
java实现的数据库操作只能是JDBC
mybatis底层也是JDBC
Mybatis前身就是ibatis,是一个支持普通sql查询,存储过程和高级映射的一个优秀的持久层(ORM)框架
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的封装
MyBatis可以向PreparedStatement中的输入参数进行输入映射,将查询的结果集进行输出映射,映射成java对象
总结JDBC的问题
1.数据库连接,使用时就创建,不使用立即释放,对数据库进行频繁的开启和关闭,浪费资源,影响数据库的性能
解决:使用数据库连接池
2.将sql语句写在java代码中,如果需要修改sql语句需要重新编码,不利于维护
解决:放入到配置文件.xml
3.向Preparedstatement中设置参数的时候也是在java代码中,不利于维护
解决:放入到配置文件中
4.从ResultSet中遍历结果的时候,需要手动映射结果集
解决:将查询的结果集,自动映射成java对象
依赖两个jar包
mybatis自身的
mybatis.jar
数据库的
mysql-jdbc.jar-----mysql
ojdbc.jar----------oracle
两种配置文件:
configuration配置(只有一个)
连接信息
系统的环境信息
mapper配置(有多个)
sql语句
映射信息
configuration配置详解
environments:配置连接的环境,可能有多个,通过default指定是某一个,default的值对应的下面子环境的id值
environment:一个连接的环境,id表示该环境的唯一性标示
transactionManager:事务管理器
JDBC:使用了JDBC的提交和回滚,它依赖于从数据源得到的连接来管理事务的范围
conn.setAutoCommit(false);
conn.commit();
conn.rollback();
MANAGED:这个配置几乎啥都没做,它从来不会提交或者回滚一个连接
它将事务扔给了其他框架来做,自己不管理
dataSource:用于配置连接信息
UNPOOLED:没有连接池
POOLED:有连接池
JNDI:向其他容器要连接
typeAliases:取别名
第一种方式:每一个对象配置一个别名
<typeAlias type="entity.User" alias="user"/>
type:对应的java对象
alias:别名
第二种方式:扫包
<package name="entity"/>
name:需要扫描的包
Mapper配置文件
mapper标签
namespace:一般是包名.类名
select标签
方法的参数:
如果只有一个,正常
如果有多个
方式一:当遇到多条件的时候,将多条件的数据封装成一个对象配置
方式二:在mapper中不配置parameterType,直接写参数的下标,参数在dao层接口中设置
id:方法名,需要与dao层的方法名相同
parameterType:参数的类型
resultType:返回值的类型
查询的时候如果返回值是一个对象的集合,那么配置的resultType就是这个对象
resultMap:另一种映射方式
数据库返回数据与java对象进行映射的配置
sql标签
这个元素可以被用来定义可重用的SQL代码段
insert标签
id:方法名
parameterType:参数类型
保存时需要提交事务
如果想要保存时返回主键,需要加如下配置
useGeneratedKeys="true"-----配置保存时返回主键
keyProperty="id" ----------主键所对应的java对象中属性的名字
keyColumn="id" ---------主键所对应的数据库中列名
使用注解的方式代替配置文件
对于简单语句来说,使用注解代码会比较清晰
但是对于复杂语句来说,会混乱,所以官方并不推荐使用注解的方式、
@select--相当于select标签
@Results(value={
@Result(id=true,property="id",column="user_id"),
@Result(property="username",column="user_username"),
@Result(property="password",column="user_password"),
@Result(property="phone",column="user_phone")
})
@Results:相当于resultMap
id=true:表示是主键
property:java对象属性名
column:数据库字段名
@Options:选项
相当于xml配置中的标签的属性
id name password
select * from t_user where id = ?
select * from t_user where username = ?
select * from t_user where id = ? and username = ?
select * from t_user where username = ? and password = ?
select * from t_user where 1=1 and password = ?
StringBuffer sql = new StringBuffer()
.append("select * from t_user where 1=1")
if(id!=null){
sql.append("and id = ? ")
}
if(name != null){
sql.append("and name = ? ")
}
动态sql
if
choose(when,otherwise)
where
trim
foreach
if:就是一个简单的条件判断,通过if语句我们可以实现某些简单的条件选择查询
只要条件满足会一直添加
choose:相当于jstl中的choose标签
通常与when和otherwise搭配使用
when:当when中的条件满足的时候加入其中的内容
otherwise:当所有的条件都不满足的时候加入其中的内容
只要满足一个条件就不再考虑其他条件
where:简化了sql语句中where中的条件判断
将最终生成的sql语句中添加where关键字
并且将条件部分第一个条件前面的and/or连接条件的关键字自动去除
trim:可以在自己包含的内容中加上某些前缀或者后缀,
也可以把包含的内容部分的首部或者尾部的某些内容去掉
prefix:加前缀
suffix:加后缀
prefixOverrides:忽略首部内容
在忽略首部内容时,如果有多个关键字选择,以|分隔,并且|后面不能有空格
suffixOverrides:忽略尾部内容
set:在包含的语句块前面加上set
如果包含的语句是以逗号结束会把该逗号去掉
foreach:主要用在in语句中,可以在sql语句中进行迭代一个集合
collection:参数的类型,可能有三种值
传入的参数类型的同一种,并且用的是一个List存放,这时候用:list
穿入的参数类型是同一种,并且使用的是一个array数组,这时候用:array
传入的参数类型不同:封装成map
item:相当于var,表示集合中每一个元素进行迭代时的别名
index:指定一个名字,用于表示在迭代过程中,每次迭代的位置
open:表示该语句从什么地方开始迭代,in语句中是以"("开始
close:什么时候结束
separator:表示迭代的数据之间的分隔符
select * from t_user where id in(1,3,5)
阅读全文
0 0
- mybatis自己总结资料
- box2d学习小资料自己总结
- iOS 自己总结的一些学习资料
- mybatis自己学习的一些总结
- mybatis资料
- MyBatis资料
- 自己资料
- 关于maemo Desktop/HomeUI自己收集的资料总结
- 个人总结的对自己有用的资料
- 负载均衡-自己查询资料实验之后总结
- Context 看资料后自己的小总结
- 自己总结的QT相关资料和网址汇总
- 生成模型和判别模型,自己看完资料后总结
- 关于MyBatis资料出处
- MyBatis一些资料
- SpringMVC Mybatis学习资料
- MyBatis学习资料
- MyBatis的一些资料
- MAC 终端SSH公钥登录Linux
- Mac上通过终端向GitHub传输项目
- 欢迎使用CSDN-markdown编辑器
- iOS UIPopoverPresentationController的使用
- IDEA 快速返回上次查看代码的位置
- mybatis自己总结资料
- 静态成员和静态成员函数
- websocket规范 RFC6455 中文版
- SDN控制器Floodlight源码学习(八)--转发模块(Forwarding)
- 夜间模式
- angularJS实现手风琴效果
- 一次mysql死锁的排查过程
- Spring中事务的(特性,传播行为,隔离级别,不合理现象,丢失更新,案例..)
- C++编译预处理:宏定义指令、文件包含指令和条件编译指令