mybatis 框架简单实例

来源:互联网 发布:微信收费群设置 知乎 编辑:程序博客网 时间:2024/05/01 13:23
本文主要介绍了如何使用mybatis进行简单的数据库操作。本人使用的是mybatis3.05。
1.创建数据库表(User表)
CREATE TABLE `NewTable` (`userId`  bigint(20) NOT NULL AUTO_INCREMENT ,`userName`  varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,`password`  varchar(80) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,`comment`  varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL ,PRIMARY KEY (`userId`),UNIQUE INDEX `UQ_User_userName` (`userName`) USING BTREE)

2.2. 创建实体类

package com.mybatis.config;public class User {    private int userId;    private String userName;    private String password;    private String comment;    public int getUserId() {        return userId;    }    public void setUserId(int userId) {        this.userId = userId;    }    public String getUserName() {        return userName;    }    public void setUserName(String userName) {        this.userName = userName;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }    public String getComment() {        return comment;    }    public void setComment(String comment) {        this.comment = comment;    }

3. 定义数据访问接口

package com.mybatis.config;import java.util.List;public interface UserDao {        public int insert(User user);        public int update(User user);        public int delete(String userName);        public List<User> selectAll();        public int countAll();        public User findByUserName(String userName);}

4.创建MyBatis映射文件(UserDaoMapper.xml)

<?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.mybatis.config.UserDao">    <select id="countAll" resultType="int">        select count(*) c from user;    </select>        <select id="selectAll" resultType="com.mybatis.config.User">        select * from user order by userName asc    </select>        <insert id="insert" parameterType="com.mybatis.config.User">        insert into user(userName,password,comment) values(#{userName},#{password},#{comment})    </insert>        <update id="update" parameterType="com.mybatis.config.User">        update user set userName=#{userName},password=#{password},comment=#{comment} where userName=#{userName}    </update>        <delete id="delete" parameterType="int">        delete from user where userName=#{userName}    </delete>        <select id="findByUserName" parameterType="String" resultType="com.mybatis.config.User">        select * from user where userName=#{userName}    </select></mapper>

5. 创建mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC" />            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver" />                <property name="url" value="jdbc:mysql://localhost:3306/hlp?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull" />                <property name="username" value="root" />                <property name="password" value="1234" />            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="com/mybatis/config/UserDaoMapper.xml"/>    </mappers></configuration>

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 intojdorderinfo(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>  



0 0
原创粉丝点击