mybatis学习笔记-1

mybatis是一个ORM框架,因为activiti使用了mybatis,所以学习下;

mybatis单独运行可以不依靠任何框架,也不需要tomcat;

一,步骤概要:

1,手动创建数据库表,创建一个USER表;

2,创建核心配置文件configuration.xml;

3,创建POJO实体文件:user.java;

4,创建DAO:接口usermapper.java,接口实现usermapper.xml;

5,创建测试类;

二,具体步骤:

总览项目文件目录:

mybatis学习笔记-1_第1张图片

1,创建USER表(使用H2数据库,嵌入式数据库,便于测试);

//创建USER表
CREATE TABLE USER (
 ID INT IDENTITY ( 1,1 ) PRIMARY KEY , 
USERNAME VARCHAR ( 10 ) ) ;
//插入初始用户
INSERT INTO USER(USERNAME ) VALUES ( '用户一');
INSERT INTO USER(USERNAME ) VALUES ( '用户二');
INSERT INTO USER(USERNAME ) VALUES ( '用户三');

1.1, 连接H2数据库,JAR包已经包含驱动:

mybatis学习笔记-1_第2张图片

1.2, 创建出来的USER表:

mybatis学习笔记-1_第3张图片

2,configuration.xml配置文件:

<?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>  
    <!--加载数据库连接信息外置文件-->  
    <properties resource="db.properties" />
    <typeAliases>  
        <!--给实体类起一个别名 user ,别名便于在映射文件中代替全路径名,简化书写-->  
        <typeAlias type="test.java.pojo.User" alias="User" />  
    </typeAliases>  
    <!--数据源配置  这块用 H2数据库 连接信息在db.properties-->  
    <environments default="development">  
        <environment id="development">  
            <transactionManager type="jdbc" />  
            <dataSource type="POOLED">  
                <property name="driver" value="${db.driver}" />  
                <property name="url" value="${db.url}" />  
                <property name="username" value="${db.username}" />  
                <property name="password" value="${db.password}" />  
            </dataSource>  
        </environment>  
    </environments>  
    <mappers>  
        <!--userMapper.xml装载进来  同等于把“dao”的实现装载进来 -->  
        <mapper resource="test/java/dao/UserMapper.xml" />  
    </mappers>  
</configuration>

数据库连接文件db.properties:

# db config
db.driver=org.h2.Driver
db.url=jdbc:h2:file:~/mybatis;AUTO_SERVER=TRUE
db.username=sa
db.password=

3,创建user.java:

package test.java.pojo;
public class User {
        private int id;
	private String username;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
}

4,创建DAO(增删改查)以及DAO实现

4.1, DAO接口:增删改查的接口,贯彻面向接口编程的思想,resultMap是与数据库字段对应的结果映射,可以简便查询结果取值

package test.java.dao;
import java.util.List;
public interface UserMapper {
	//普通的增删该查
	public User findById(int id);
	public User findByName(String username);
	public List<User> findAll();
	public int delete(String userName);
	public int insert(User user);
	public int update(User user);
	public int countAll();
}

4.2,DAO实现:mybatis实现方法,在XML输入SQL语句

<?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">  
    <!--这块等于dao接口的实现  namespace必须和接口的类路径一样-->  
<mapper namespace="test.java.dao.UserMapper">  
    <!-- findById必须和接口中的方法名一样  返回一个User  就是刚才的别名  如果不弄别名要连类路径一起写 麻烦-->  
    <select id="findById" parameterType="HashMap" resultType="User">  
        select  * from user where id=#{id}  
    </select>  
    
     <select id="findByName" parameterType="String" resultType="User">  
        select  * from user where username=#{username}  
    </select> 
    
    <select id="findAll"  resultMap="userResultMap">  
        select * from user   
    </select>  
    
    <resultMap type="User" id="userResultMap" >
	    <id property="id" column="id"/>
	    <result property="username" column="username"/>
    </resultMap>
    
    <insert id="insert" parameterType="User">
        INSERT INTO USER VALUES (#{id}, #{username})
    </insert>
    
    <update id="update" parameterType="User">
        update user set userName=#{username} where id=#{id}
    </update>
    
    <delete id="delete" parameterType="String" >
        delete from user where userName like #{username}
    </delete>
   
    <select id="countAll" resultType="int">
        select count(1) from user
    </select>
</mapper>

5,测试类

package test.java.mytest;

import static org.junit.Assert.*;

import java.io.IOException;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import test.java.dao.UserMapper;
import test.java.pojo.User;

public class TestMybatis {
	UserMapper usermapper=null;
	User user=null;
	@Before
	public void beforetest(){
		//创建sqlsession和usermapper
		SqlSessionFactory sessionFactory = null;  
	    String resource = "configuration.xml";  
	    try {  
	         sessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resource));  
	    } catch (IOException e) {  
	            e.printStackTrace();  
	        }
	    usermapper=sessionFactory.openSession().getMapper(UserMapper.class);
	    }

	@Test
	public void test() {
		user=new User();
		//findById
		user=usermapper.findById(1); 
		assertNotNull(user);
		
		//findByName
		user=usermapper.findByName("用户一");
		assertNotNull(user);
		
		//findAll
		List<User> users=usermapper.findAll();
		assertNotNull(users.get(0).getUsername());
	
		//insert
		int before_insert=usermapper.countAll();
		user.setId(100);
		user.setUsername("用户N");
		usermapper.insert(user);
		int after_insert=usermapper.countAll();
		assertEquals(before_insert, after_insert-1);
		
		//update
		user.setId(100);
		user.setUsername("用户B");
		usermapper.update(user);
		assertEquals("用户B", usermapper.findById(100).getUsername());
		
		//delete
		user.setUsername("%用户%");
		usermapper.delete(user);
		assertNull(usermapper.findByName("用户一"));
		
		//countAll
		int countall=usermapper.countAll();
		assertNotNull(countall);
		
	}

}

三,总结

mybatis类似一种图示关系运行:

mybatis学习笔记-1_第4张图片

你可能感兴趣的:(mybatis学习笔记-1)