发表于: 2019-11-25 20:52:07

1 1075


今天完成的事情:

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的配置


返回列表 返回列表
评论

    分享到