2.2. 创建实体类
3. 定义数据访问接口
4.创建MyBatis映射文件(UserDaoMapper.xml)
5. 创建mybatis配置文件
6. 编写测试代码
package com.mybatis.config;
import java.io.Reader;
import java.util.Iterator;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
public class UserDaoTest {
@Test
public void userDaoTest() throws Exception
{
String resource = "MyBatis-Configuration.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(reader);
SqlSession session = factory.openSession();
UserDao userDao = session.getMapper(UserDao.class);
User user = new User();
user.setUserName("hongye");
user.setPassword("123456");
user.setComment("备注");
userDao.insert(user);
System.out.println("记录条数:"+userDao.countAll());
List<User> users = userDao.selectAll();
Iterator<User> iter = users.iterator();
while(iter.hasNext()){
User u = iter.next();
System.out.println("用户名:"+u.getUserName()+"密码:"+u.getPassword());
}
user.setComment("comment");
userDao.update(user);
User u = userDao.findByUserName("hongye");
System.out.println(u.getComment());
userDao.delete("hongye");
System.out.println("记录条数:"+userDao.countAll());
session.commit();
session.close();
}
}
7. parameterType、parameterMap、resultType、resultMap以及resultMap
(1)、resultMap这个标签是数据库和javabean的映射关系的定义,和其他四个联系不大,下面看看在mybatis映射文件中的定义
<resultMap id="result" type="com.base.service.provider.jd.dto.JdOrderInfoDto">
<id property="id" column="id" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result property="bzOrderId" column="bzOrderId" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result property="success" column="success" javaType="int" jdbcType="INTEGER"/>
<result property="jdOrderId" column="jdOrderId" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result property="mobile" column="mobile" javaType="java.lang.String" jdbcType="VARCHAR"/>
<result property="orderTime" column="orderTime" javaType="java.util.Date" jdbcType="DATE"/>
</resultMap>
标签中的type的值就是具体一个javabean的类完整路径,而其内的id 标签 以及result 中就是对javabean 和数据库中的数据的对应关系,javaType、jdbcType可写可不写。
(2)、parameterMap这个也是传参数用的但是这个已经过时,不使用了所以这里也就不管了。
(3)、parameterType这个是传参数的类型的设置,这个变量的值可以设置为java的基本类型也可以是自定义的javabean
<insert id="saveJdOrderInfo" parameterType="com.base.service.provider.jd.dto.JdOrderInfoDto">
insert into jdorderinfo(id,bzOrderId,success,jdOrderId,name,mobile,orderTime) values(#{id},#{bzOrderId},#{success},#{jdOrderId},#{name},#{mobile},#{orderTime})
</insert>
这插入语句中的parameterType传的值就是自定义的一个javabean,他的值是javabean的这个类的全路径。
下面这个是传入java已有类型的
<insert id="accessToken" parameterType="java.util.Map">
insert into mytest(id,name,sex) values(#{id},#{name},#{sex})
</insert>
从中我们能看到传入的是一个map集合,但要注意这个map中的key要和values中的取值的变量的名称一致。
(4)、resultType这个变量定义了我们查询返回的数据的类型,他的值只能是java中已有的类型如Map,而且mybatis比较牛逼的就是把查询结果组装为java的Map集合,resultType和resultMap不能同时使用,只能使用其中一个。下面看看resultType="java.util.Map"的类型。
<!-- 查询返回的是 list<map> -->
<!-- resultType 就是返回查询结果的类型,而如果是resultMap=则返回的就是你定义的javabean -->
<select id="selectAccessToken" parameterType="int" resultType="java.util.Map">
select id ,name,sex from mytest where id=#{id}
</select>
这条sql语句查询后会将结果查询结果封装到Map集合中,key就是id,name,sex而value就是这边属性对应的值。
(5)、resultMap这个变量的值就是我们自己定的resultMap也就是(1)、中说的那个标签的值的引用,如果你要返回值为你自定义类型,resultMap的值就是我们(1)中定义的这个标签的id
<!--查询返回自定义类型,resultMap的值为自定义的resultMap标签的id -->
<select id="selectAll" parameterType="java.lang.String" resultMap="result">
select * from jdorderinfo where id=#{id}
</select
这个查询返回的就是我们(1)中自定义的resultMap类型。
这个问题在面试中时不时的问道,我们要注意如果是resultMap则返回的是我们自定义的resultMap的类型而如果是resultType则返回的是我们赋值的类型,比如map集合等,在同一个查询语句中不能同时使用只能使用其中一个,为什么,因为这些格式我们定义后,mybatis获得查询结果后会按照这些定义给我们组装成我们想要的格式,如果同时定义两种格式,他没法组装或者说我们自己都没法做到。
8.完整的定义
<?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.base.service.jdOrderInfo">
<!-- resultMap 其中对应的就是一个类中属性字段的值和数据库中的属性字段 ,javaType和jdbcType简单常见类型可省略 -->
<resultMap id="result"
type="com.base.service.provider.jd.dto.JdOrderInfoDto">
<id property="id" column="id" javaType="java.lang.String" jdbcType="VARCHAR" />
<result property="bzOrderId" column="bzOrderId" javaType="java.lang.String" jdbcType="VARCHAR" />
<result property="success" column="success" javaType="int" jdbcType="INTEGER" />
<result property="jdOrderId" column="jdOrderId" javaType="java.lang.String" jdbcType="VARCHAR" />
<result property="name" column="name" javaType="java.lang.String" jdbcType="VARCHAR" />
<result property="mobile" column="mobile" javaType="java.lang.String" jdbcType="VARCHAR" />
<result property="orderTime" column="orderTime" javaType="java.util.Date" jdbcType="DATE" />
</resultMap>
<!-- 添加用户信息 -->
<!-- parameterType就是你接受的参数的类型 其实还有parameterMap但是这个已经过时,所以最好不要使用! -->
<!--如果参数是java基本类型就直接写基本类型而如果是类则写类的全路径 -->
<insert id="saveJdOrderInfo" parameterType="com.base.service.provider.jd.dto.JdOrderInfoDto">
insert into
jdorderinfo(id,bzOrderId,success,jdOrderId,name,mobile,orderTime)
values(#{id},#{bzOrderId},#{success},#{jdOrderId},#{name},#{mobile},#{orderTime})
</insert>
<delete id="delAccessToken" parameterType="int">
delete from jdorderinfo where id=#{id}
</delete>
<update id="updateAccessToken" parameterType="java.util.Map">
update jdorderinfo set name=#{name},mobile=#{mobile} where id=#{id}
</update>
<!-- 查询返回的是 list<map> -->
<!-- resultType 就是返回查询结果的类型,而如果是resultMap=则返回的就是你定义的javabean -->
<select id="selectAccessToken" parameterType="int" resultType="java.util.Map">
select id ,name,sex from jdorderinfo where id=#{id}
</select>
<!--查询返回自定义类型,resultMap的值为自定义的resultMap标签的id -->
<select id="selectAll" parameterType="java.lang.String"
resultMap="result">
select * from jdorderinfo where id=#{id}
</select>
</mapper>