Mybatis学习笔记

来源:互联网 发布:淘宝信用贷款额度 编辑:程序博客网 时间:2024/05/17 14:27
什么是MyBatis?
MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录。
 

总体流程

(1)加载配置并初始化

触发条件:加载配置文件

SQL的配置信息加载成为一个个MappedStatement对象(包括了传入参数映射配置、执行的SQL语句、结果映射配置),存储在内存中。

(2)接收调用请求

触发条件:调用Mybatis提供的API

传入参数:为SQLID和传入参数对象

处理过程:将请求传递给下层的请求处理层进行处理。

(3)处理操作请求 触发条件:API接口层传递请求过来

传入参数:为SQLID和传入参数对象

处理过程:

(A)根据SQLID查找对应的MappedStatement对象。

(B)根据传入参数对象解析MappedStatement对象,得到最终要执行的SQL和执行传入参数。

(C)获取数据库连接,根据得到的最终SQL语句和执行传入参数到数据库执行,并得到执行结果。

(D)根据MappedStatement对象中的结果映射配置对得到的执行结果进行转换处理,并得到最终的处理结果。

(E)释放连接资源。

(4)返回处理结果将最终的处理结果返回。
    我的第一个Mybatis Demo 
     
1.创建数据库表(User表)
          
create table Users

 (

  userId  int  identity(1,1) primary key,--自动增长

  userName  varchar(30) NOT NULL ,

  password  varchar(80)  NOT NULL ,

  comment varchar(250)   NULL DEFAULT NULL

)

select * from Users 
2. 创建实体类 
package xiangjie.mybatis.model;

/**

 * @author 向洁

 * 创建实体类User

 */

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 xiangjie.mybatis.interfaces;

import java.util.List;

import xiangjie.mybatis.model.User;

/**
 * @author 向洁
 * 定义数据访问接口UserDao
 */
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.sql.jdbc.Driver" />
                <property name="url" value="jdbc:sql://localhost:8080/hlp?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull" />
                <property name="username" value="sa" />
                <property name="password" value="" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/config/UserDaoMapper.xml"/>
    </mappers>
</configuration>

6. 编写测试代码   
   package org.xiangjie.test;

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 xiangjie.mybatis.interfaces.UserDao;
import xiangjie.mybatis.model.User;

/**
 * @author 向洁
 * 测试代码类UserDaoTest
 */
public class UserDaoTest {
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();
    }

}
原创粉丝点击