发表于: 2019-11-25 20:52:07
1 1072
今天完成的事情:
Mybatis基于xml的CRUD
mybatis基于注解的CRUD
resultMap结果类型
type属性:指定实体类的全限定类名
id 属性:给定一个唯一标识,是给查询 select 标签引用用的。
id 标签:用于指定主键字段
result 标签:用于指定非主键字段
column 属性:用于指定数据库列名
property 属性:用于指定实体类属性名称
映射配置
mybatis注解
@Insert:实现新增
@Update:实现更新
@Delete:实现删除
@Select:实现查询
@Result:实现结果集封装
@Results:可以与@Result 一起使用,封装多个结果集
@ResultMap:实现引用@Results 定义的封装
@One:实现一对一结果集封装
@Many:实现一对多结果集封装
@SelectProvider: 实现动态 SQL 映射
@CacheNamespace:实现注解二级缓存的使用
MySQL中通配符是%占位符是_
#{ } 的值需要和类成员变量的变量名一致
#{ }与${ } 的区别
1、#{ }占位符,相当于jdbc中的?,当参数类型传递的是java简单类型的时候,花括号中的内容可以是任意字符串
2、${ }字符串拼接符,当参数类型传递的是java简单数据类型的时候,花括号中的内容只能是 value
3、sql语句中使用字符拼接可能引起sql注入的问题,但是mybatis中可以放心使用,原因是mybatis是后端dao层开发,参数在前端表现层和业务层已经处理好。
ps:
1、持久层接口和持久层接口的映射配置必须在相同的包下
2、持久层映射配置中 mapper 标签的 namespace 属性取值必须是持久层接口的全限定类名
3、SQL 语句的配置标签<select>,<insert>,<delete>,<update>的 id 属性必须和持久层接口的 方法名相同
明天计划的事情:
spring整合Mybatis
遇到的问题:
报错信息:java.lang.AbstractMethodError: Method com/mchange/v2/c3p0/impl/NewProxyPreparedStatement.isClosed()Z is abstract
解决:
需要更换c3p0版本
修改前
修改后
至于为啥,我也不知道
错误信息:
Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibatis.type.TypeException: Could not resolve type alias 'c3p0'. Cause: java.lang.ClassNotFoundException: Cannot find class: c3p0
解决:
Mybatis 没有帮开发者实现 c3p0 数据库连接池,故需要使用者自己实现 c3p0 来加载数据连接池
只要继承 UnpooledDataSourceFactory 并把 dataSource 实现,我们的 mybatis 就实现了 c3p0 数据库连接池
继承UnpooledDataSourceFactory类
mybatis配置c3p0
dataSource type必须是继承了UnpooleDataSourceFactory类的子类,必须是全限定类名
错误信息:
执行成功,但是数据库没有数据
解决:
增删改执行之后需要提交事务
收获:
mybatis基于xml的CRUD,还有mybatis基于注解的CRUD,spring基于xml的配置
评论