第一章:MyBatis 参数详解
-
parameterType:
- 简单数据类型:
- int double String Long
- 简单的写法:
- Java.lang.Integer ==> int、Int、integer、Integer 都可以,框架提供简写的方式
- POJO(JavaBean 实体类):对象类型,默认是不能简写,可以配置 User 对象。
- POJO 包装对象类型:
- 包含更多的实体类:
java">public class QueryVo implements Serializable {//自己属性private String name;//user 属性private User user;//role 属性private Role role;public String getName() {return name;}public void setName(String name) {this.name = name;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public Role getRole() {return role;}public void setRole(Role role) {this.role = role;}}//------------------------ //测试包装类查询: public List<User> findByVo(QueryVo vo);//------------------------ <!-- 包装类测试 --> <select id="findByVo" resultType="com.qcby.model.User" parameterType="com.qcby.model.QueryVo">select * from user where username = #{user.username} </select>
- 包含更多的实体类:
- 简单数据类型:
-
resultType:
- 返回简单数据类型:
- int double long String
- 返回 POJO 数据类型:
- 返回 User 对象类型
- 返回简单数据类型:
-
关联映射:
- 返回类型为 resultMap 映射结果集返回
- 创建映射结果集,设置返回类型:
- <result/> 实体类和数据库关联字段进行映射
- 复杂属性单独处理:
- association:处理对象
- javaType:标明对象类型
- collection:处理集合
- ofType:标明对象
- association:处理对象
-
resultMap 结果类型:
- resultType 可以指定 pojo 将查询结果映射为 pojo,但需要 pojo 的属性名和 SQL 查询的列名一致方可映射成功
- 如果 SQL 查询字段名和 pojo 的属性名不一致,可以通过 resuletMap 将字段名和属性名做一个对应关系,resultMap 实质上还需要将查询结构映射到 pojo 对象中
- resultMap 可以实现将查询结构映射为复杂类型的 Pojo,比如现在查询结果映射对象中包括 Pojo 和 list 实现一对一和一对多查询。
<!-- 配置 resultMap,用来进行数据封装id="唯一的名称,用来被引用的唯一标识"type="进行封装数据的类型" --> <resultMap id="userMap" type="com.qcby.model.User"><!-- property="JavaBean 中的属性"--><!-- colum="表中的字段"--><result property="id" column="id"/><result property="username" column="_username"/><result property="birthday" column="_birthday"/><result property="sex" column="_sex"/><result property="address" column="_address"/> </resultMap><!-- 演示 resultMap 配置 --> <select id="findUsers" resultMap="userMap">select id _id,username _username,birthday _birthday,sex _sex,address _address from user </select>
-
#{} 和 $ value} 符号:
- ${value}:数据拼接,在本地 SQL 语句进行拼接(会有SQL 注入问题)
- #{}:占位符 ==> 被编译成占位符 ?
- 两者的选择:
- 能用 #{} 就用 #{},尽量少用 ${}
- 当数据作为参数,或者 order by 排序时用 ${}
- 传参时参数使用 @Param 注解,
- 正确的将参数传入 SQL 语句中,一般通过 #{} 的方式,${} 会有 SQL 注入的问题
第二章:SqlMapConfig.xml 配置文件
-
定义 properties 标签的方式管理数据库的信息
- 把数据库的信息定义 property 标签中的方式
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- 配置具体的环境 --><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"></transactionManager><!-- 配置是否需要使用连接池, POOLED 使用,UNPOOLED 不适用--><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver"/><property name="url" value="jdbc:mysql:///mybatis_demo"/><property name="username" value="root"/><property name="password" value="root"/></dataSource></environment></environments><!-- 加载映射的配置文件 --><mappers><mapper resource="Mapper/UserMapper.xml"/></mappers></configuration>
- 在项目中定义 jdbc.properties 属性文件,存储数据库相关的信息,统一管理:
- jdbc.properties 属性文件
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql:///mybatis_demo jdbc.username=root jdbc.password=root
- SqlMapConfig.xml 的配置文件
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><!-- 读取外部的配置文件resource:文件的相对路径写法--><properties resource="jdbc.properties"></properties><!-- 配置具体的环境 --><environments default="mysql"><environment id="mysql"><transactionManager type="JDBC"/><!-- 配置是否需要使用连接池, POOLED 使用,UNPOOLED 不适用--><dataSource type="POOLED"><property name="driver" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></dataSource></environment></environments><!-- 加载映射的配置文件 --><mappers><mapper resource="Mapper/UserMapper.xml"/></mappers></configuration>
- jdbc.properties 属性文件
- 把数据库的信息定义 property 标签中的方式
-
类型别名定义:
- MyBatis 自己有类型别名的注册类,编写 int 或者 integer 通过注册可以找到 java.lang.Integer
- 也可以自己进行别名的注册:
<!-- 定义别名 --><typeAliases><!-- 把com.qcby.model.User 使用 user 别名来显示,别名 user User USER 都可以,默认是忽略大小写的 --> <!-- <typeAlias type="com.qcby.model.User" alias="user"/>--><!-- 针对com.qcby.model 包下的所有的类,都可以使用当前的类名作为别名 --><package name="com.qcby.model"/></typeAliases>
- UserMapper.xml 的配置文件使用别名:
<!-- ersultType="com.com.qcby.model.User" 全路径形式 --> <!-- ersultType="user" 别名形式 --> <select id="findById" resultType="user">select * from user where id=#{id}; </select>
-
MyBatis 连接池的分类:
- MyBatis 内置了连接池技术,dataSource 标签的 type 属性有 3 个取值
- POOLED:使用连接池
- UNPOOLED:不适用连接池
- JNDI:使用 JNDI 实现连接池
- MyBatis 内置了连接池技术,dataSource 标签的 type 属性有 3 个取值