mybatis
Posted xue_yun_xiang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis相关的知识,希望对你有一定的参考价值。
一、别名的配置
别名 就是给类起一个小名,便于使用
integer 就是java.lang.Integer 的 别名
parameterType="integer"
parameterType="java.lang.Integer"
自定义别名
1、在mybatis 配置文件声明
<!--
typeAliases 必须放到 <environments 之前
xml 的约束 规定当前 xml 可以使用哪些 标签,标签的顺序,不可以随意更改
-->
<typeAliases>
<!--
com.qfedu.entity.Student 取别名 student
-->
<!-- <typeAlias type="com.qfedu.entity.Student" alias="student"></typeAlias>-->
<!--
使用 package 扫描包下对应的实体类 为所有的实体类 取别名
com.qfedu.entity.Student student ,Student
-->
<package name="com.qfedu.entity"/>
</typeAliases>
2使用
<!--
resultType="student" 引用 别名
-->
<select id="findAllStudent" resultType="Student">
select id,name,age,sex,height from student_tb
</select>
resultMap配置结果类型
当实体类中的字段和数据库中的字段不匹配时,我们可以有两种方式解决
-1.使用sql语句的 as 修改查询结果的名称
-2.使用resultMap,可以实现多个sql语句共用
resultMap作用:
-1.当实体类中的字段和数据库中的字段不匹配时
-2.解决一对多,一对一问题
第一种方式:
<!--
实体类属性 和 数据库属性 不一致
第一种方案 使用 sql 别名
使用别名 resultType="student2"
-->
<select id="findAllStudent2" resultType="student2">
select id studentId,name studentName,sex studentSex,age studentAge ,height studentHeight from student_tb
</select>
第二种方式:
<!--
实体类属性 和 数据库属性 不一致
第一种方案 使用 resultMap
<resultMap 作用就是将实体类中的属性 查询结果中的列名映射
id="studentmap2" 唯一map id
type="Student2" 要映射为那个类型的对象
<id property="studentId" column="id"></id>
<id 指的是主键列
property="studentId" 实体类中的属性 对应主键
column="id" 查询结果/数据表列名
<result 代表普通的列
property="studentName" 实体类中的普通属性
column="name" 查询结果/数据表普通列名
javaType="" 对应 实体类改属性的 类型 可以不写
jdbcType="" 对应数据表中 该列的类型 可以不写
-->
<resultMap id="studentmap2" type="Student2">
<id property="studentId" column="id"></id>
<result property="studentName" column="name"></result>
<result property="studentAge" column="age"></result>
<result property="studentSex" column="sex"></result>
<result property="studentHeight" column="height" ></result>
</resultMap>
<!--
resultMap="studentmap2"引用自定义map
-->
<select id="findAllStudent2" resultMap="studentmap2" >
select id ,name ,sex ,age ,height from student_tb
</select>
import com.qfedu.entity.Student2;
import java.util.List;
public interface Student2Dao {
/**
* 查询所有学生
* @return
*/
List<Student2> findAllStudent2();
}
测试:
/**
* 查询所有学生 使用resultMap
*/
@Test
public void findAllStudent2Test(){
Student2Dao student2Dao = sqlSession.getMapper(Student2Dao.class);
List<Student2> studentList2= student2Dao.findAllStudent2();
for (Student2 student2 : studentList2) {
System.out.println("student2:"+student2);
}
}
三、mybatisConfig.xml配置文件
1、properties
在resource 中创建mysql.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/java2102?useSSL=false
jdbc.username=root
jdbc.password=123456
2、typeAliases别名
使用
<!--
引入配置文件
-->
<properties resource="mysql.properties"></properties>
<!--
typeAliases 必须放到 <environments 之前
xml 的约束 规定当前 xml 可以使用哪些 标签,标签的顺序,不可以随意更改
-->
<typeAliases>
<!--
com.qfedu.entity.Student 取别名 student
-->
<!-- <typeAlias type="com.qfedu.entity.Student" alias="student"></typeAlias>-->
<!--
使用 package 扫描包下对应的实体类 为所有的实体类 取别名
com.qfedu.entity.Student student ,Student
-->
<package name="com.qfedu.entity"/>
</typeAliases>
<!--配置mybatis环境
default="mysql" 选择哪一个环境
-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"></transactionManager>
<!--配置数据源
POOLED 连接池形式
-->
<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>
3、mappers映射器配置
<!--
<mappers> 配置
-->
<mappers>
<!--
告诉mybatis 要根据配置文件StudentDao.xml 的配置 生成 对应的接口实现类
-->
<!--第一种 声明mapper resource xxx.xml -->
<!-- <mapper resource="com/qfedu/dao/StudentDao.xml"></mapper>
<mapper resource="com/qfedu/dao/Student2Dao.xml"></mapper>-->
<!-- 第二种 声明mapper xxx....xxDao-->
<!-- <mapper class="com.qfedu.dao.StudentDao"></mapper>
<mapper class="com.qfedu.dao.Student2Dao"></mapper>-->
<!-- 第三种 声明mapper <package
mybatis 将包com.qfedu.dao 下所有的接口生成对应的对象
-->
<package name="com.qfedu.dao"/>
</mappers>
4、开启驼峰映射
<!--
mapUnderscoreToCamelCase 开启驼峰映射写法 ,默认是关闭的
mybatis 会自动将 student_info 的列名 自动 映射到实体类 属性 studentInfo
student_info_version studentInfoVersion
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
多参数使用
/**
* 根据性别 和年龄 查选
*
* 多参数查询 传递
* 在mybatis 中 如果有多个参数 并且使用 #{参数名} 必须在方法中为参数声明 别名 @Param("sex")
* findStudentBySexAndAge(@Param("sex") String sex,@Param("age") int age);
*
* 也可以使用 arg0 arg1 或者 param1 param2
* 如果是传多个属性(参数)
* 也可以直接传对象
* findStudentBySexAndAge(Student student);
* 也可以直接传对象
* findStudentBySexAndAge(Map map);
* @param sex
* @param age
* @return
*/
List<Student> findStudentBySexAndAge(@Param("sex") String sex,@Param("age") int age);
<!--
多参数查询 传递
findStudentBySexAndAge(String sex,int age);
内置参数应用
sex arg0 param1
age agr1 param2
findStudentBySexAndAge(@Param("sex") String sex,@Param("age") int age);
-->
<select id="findStudentBySexAndAge" resultType="student">
select id,name,age,sex,height from student_tb where sex = #{sex} and age = #{age}
</select>
测试:
/**
* 多条件查选
* 查询性别为 M 年龄为20 的人
*/
@Test
public void findStudentBySexAndAgeTest(){
List<Student> studentList = studentDao.findStudentBySexAndAge("M", 20);
for (Student student : studentList) {
System.out.println("student:"+student);
}
}
以上是关于mybatis的主要内容,如果未能解决你的问题,请参考以下文章
SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper
MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段