关于mybatis的一些学习笔记

来源:互联网 发布:各行业薪水 知乎 编辑:程序博客网 时间:2024/06/13 12:19

使用mybatis步骤
1、在sqlmapper映射配置文件中配置sql语句如studentmapper.xml
2、创建studentmapper接口,映射接口的方法名和映射配置文件id值相同
3、编写java代码完成插入操作

mybatis需要的文件
1、mybatis配置文件 mybatis-config.xml
名字一般固定,位置是src下面
2、mybatis的映射文件XxxxMapper.xml
这个xml文件中包括Xxxx类所对应的数据库表的各种增删改查sql语句,每一个pojo对应一个映射文件
位置不固定一般是一个专门的package包下

SqlSession接口的实现类对象是mybatis中最重要的对象,我们可以使用该对象动态获得Xxxxmapper.java接口中方法所映射的sql语句(在xml文件中配置sql语句)

重点:{
*映射文件中的namespace要和映射接口权限类名对应
com.briup.mappers.StudentMapper
映射配置文件的id和映射接口的类名对应
映射文件中paratmeterType和映射接口参数对应
映射文件中ResultType和映射接口返回值对应
}
pojo类
propertity一定有getset方法
attribute不一定有setget方法
mapper.xml中对应的是get后面的字符

properties定义在配置文件中可以使用的变量
property name=”” value=””
引用变量 #{变量名}

文件名.properties 放与数据库连接的信息
保存driver url username userpasswd键值成对保存信息
在properties标签中
外部文件优先于内部定义的properties

typeAliases指定类型取别名
映射文件中type returntype parameterType使用
可以直接扫描包,将先判断是否有注解别名,没有则包中所有类取默认别名=类名
在pojo类中@Alias(“别名”) 注解 和扫描包连用

environments当前数据库环境default=“”默认环境
可以定义多个environment
每一个environment中必须有
transactionManager(事务的控制)JDBC/MAnaged事务管理器

dataSource(数据源 type=(pooled/unpooled连接池/JNDI应用服务器配置好的目录))

DEV开发环境 TEST测试环境 QA质量评估环境
UAT用户验收环境 PRODUCTION生产环境
获取指定的SqlSessionFActory= new SqlSessionFactoryBuilder.build(配置文件,enviroment id)

读取配置文件核心是获取SqlSessionFactory
然后获取SqlSession 执行sql语句

类型处理器typeHandler
自定义类型处理器
com.briup.handler
phnonetypehandler继承BaseTypeHandler
T代表需要进行类型处理的数据类型

settings全局参数设置
增加到日志名称的前缀。值可以是任意字符串

mappers元素 sql映射
指定SQLMapper文件的位置
resource属性用来指定classpath中的mapper文件
url用来通过完全文件系统路径或者web
class属性用来指向一个mapper接口
package属性用来指向可以找到mapper的接口的包名

自定义mybatis日志
mybatis支持的日志有(优先级递减排列):
SLF4J
Apache Commons Logging
Log4j2
Log4j
JDK logging

insert插入语句

insert into s_student(id,name,gender)
values (#{id},#{name},#{gender})

mysql以及其他数据库中可以自动生成主键,如:

insert into Students(name,email,phone)
values (#{name},#{email},#{phone})

适合Oracle使用的


select my_seq.nextval from dual

insert into students(stud_id,name,email,phone)
values (#{studId},#{name},#{email},#{phone})

selectkey需要注意order 属性,像mysql,sqlserver等一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值。
想Oracle这样取序列的情况,需要设置为before,否则会报错。

适合所有使用的,但是这样的话,id值不会存在于对象属性中

insert into Students(id,name,email,phone)
values (my_sql.nextval,#{name},#{email},#{phone})

update 可以返回一个int也可以选择不返回,代表更新的行数

delete删除语句

resultType代表已经存在的类比如基本数据类型,枚举,以及其他已经定义的类
resultMap未定义的不存在类,指定了他和数据库中字段的一一对应方式。

嵌套结果:在resultMap中定义association来指定一对一,collection来指定一对多的结果嵌套,再次定义resultMap来作为字段值。


嵌套查询:在resultMap中使用 assiciation来指定一对一,用一个select查询,再次查询此字段值代表的属性,然后返回。

select查询语句
select中resultMap以及Type定义的是一行所代表的一个对象。可以在接口中定义List来接受一组对象
可以在resultType中定义map(默认HashMap),set(默认HashMap),sortedset(默认TreeSet,被排序的对象需要实现compareable接口)
特殊符号如< 使用

原创粉丝点击