mybatis 框架简单实例

本文主要介绍了如何使用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 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>  



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值