你对于mybatis映射文件有多了解呢?下面的文章要给大家讲到的就是和这方面相关的内容,下面一起来详细的看一下吧。
在映射文件当中,mapper元素是映射文件的根元素,其他的标签都是它的子元素。
select
用于映射查询语句,从数据库当中读出数据,组装数据给业务开发人员。
上面的语句当中,唯一标识为findCustomerById。
它接受一个Integer类型的参数,并且返回一个Customer类型的对象。
下面是它的常见属性:
insert
用于映射插入语句,在执行完语句之后,返回一个表示插入记录数的整数。
它的常见属性除了包含select的属性之外,还有另外的三种属性:
实例代码:
<insert id="addCustomer" parameterType="com.itheima.po.Customer" keyProperty="id" useGeneratedKeys="true"> INSERT INTO t_customer(username,jobs,phone) VALUES (#{username}, #{jobs}, #{phone}) </insert>
@Test public void addCustomerTest() throws Exception { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); Customer customer = new Customer(); customer.setUsername("keke"); customer.setJobs("student"); customer.setPhone("13553423238"); int rows = sqlSession.insert("com.itheima.mapper.CustomerMapper.addCustomer", customer); System.out.println(customer.getId()); if(rows > 0) { System.out.println("您成功插入了"+rows+"条数据"); }else { System.out.println("执行插入操作失败!!!"); } sqlSession.commit(); sqlSession.close(); }
insert和update有一个子标签selectKey。
下面的话,用selectKey标签来实现主键自动增长,以此来解释它的作用:
<insert id="addCustomer" parameterType="com.itheima.po.Customer"> <selectKey keyProperty="id" resultType="Integer" order="BEFORE"> select if(max(id) is null, 1, max(id)+1) as new newId from t_customer </selectKey> INSERT INTO t_customer(id,username,jobs,phone) VALUES (#{id},#{username}, #{jobs}, #{phone}) </insert>
selectKey元素有keyProperty,resultType,order和statementType,order属性能够设置成BEFORE和AFTER,BEFORE会先执行selectKey,再执行插入语句,AFTER会先执行插入语句,再执行selectKey。
update和delete
update映射更新语句,执行之后返回一个整数,表示更新的条数。
delete映射删除语句,执行之后返回一个整数,代表删除的条数。
它的属性基本上是和select相同的。
sql
可以用SQL标签定义一段SQL语句,之后,可以用include标签进行重用。
如下:
<sql id="customerId"> FROM t_customer WHERE id = #{id} </sql> <select id="findCustomerById" parameterType="Integer" resultType="com.itheima.po.Customer"> SELECT * <include refid="customerId"/> </select>
resultMap
表示结果映射集,定义映射规则,级联的更新以及定义类型的转换等。
元素结构:
<resultMap id="" type=""> <constructor> <!-- 类在实例化时,用来注入结果到构造方法中--> <idArg></idArg> <!-- ID参数;标记结果作为ID --> <arg/> <!-- 注入到构造方法的一个普通结果 --> </constructor> <id/> <!-- 用来表示哪个列是主键 --> <result/> <!-- 注入到字段或JavaBean属性的普通结果 --> <association property="" /> <!-- 用于一对一关联 --> <discriminator javaType=""> <!-- 使用结果值来决定哪个结果集映射 --> <case value=""></case> <!-- 基于某些值的结果映射 --> </discriminator> </resultMap>
实例代码:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.itheima.mapper.UserMapper"> <resultMap id="resultMap" type="com.itheima.po.User"> <id property="id" column="t_id"/> <result property="name" column="t_name"/> <result property="age" column="t_age"/> </resultMap> <select id="findAllUser" resultMap="resultMap"> SELECT * FROM t_user </select> </mapper>
写一个相应的测试方法:
@Test public void findAllUserTest() throws IOException { String resource = "mybatis-config.xml"; InputStream is = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is); SqlSession sqlSession = sqlSessionFactory.openSession(); List <User> list = sqlSession.selectList("com.itheima.mapper.UserMapper.findAllUser"); for (User user : list) { System.out.println(user); } sqlSession.close(); }
运行结果:
DEBUG [main] - ==> Preparing: SELECT * FROM t_user DEBUG [main] - ==> Parameters: DEBUG [main] - <== Total: 3 User [id=1, name=lucy, age=25] User [id=2, name=lili, age=20] User [id=3, name=jim, age=20]
以上的内容你都了解了吗?更多相关知识,可以继续关注奇Q工具网的常见问题栏目来进行了解呢。
推荐阅读: