Mybatis 快速入门

1、环境

JDK 1.8.0_111

Eclipse Neon

Tomcat 7

Sql server2008

所需jar:

 

 

2、配置

 db.properties

jdbc.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc.url=jdbc:sqlserver://192.168.3.120:1433;databaseName=AnzhenTest
jdbc.username=sa
jdbc.password=sinopacs<?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的配置必须写在typeAliases的上面 -->
    <properties resource="db.properties"></properties>
    
    <!-- 和spring整合后 environments配置将废除-->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理,事务控制由mybatis管理-->
            <transactionManager type="JDBC" />
        <!-- 数据库连接池,由mybatis管理-->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
<!-- 加载映射文件 -->
    <mappers>
        <mapper resource="sqlmap/user.xml"/>
</mappers> </configuration>

log4j.properties

将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句,方便调试: 

### 设置Logger输出级别和输出目的地 ###
log4j.rootLogger=debug,stdout,logfile


### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout


### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=jbit.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n


###显示SQL语句部分
log4j.logger.com.ibatis=DEBUG 
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG 
log4j.logger.java.sql.Connection=DEBUG 
log4j.logger.java.sql.Statement=DEBUG 
log4j.logger.java.sql.PreparedStatement=DEBUG

sqlmap\user.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">
<!-- namespace命名空间,作用就是对sql进行分类化的管理,理解为sql隔离
    注意:使用mapper代理开发时,namespace有特殊作用
 -->
<mapper namespace="src.main.resource.userMapper">
    <resultMap id="BaseResultMap" type="com.mozi.entity.WebUser" >
        <id column="Name" property="name" jdbcType="VARCHAR" />
        <result column="TrueName" property="trueName" jdbcType="VARCHAR" />
        <result column="Pass" property="pass" jdbcType="VARCHAR" />
    </resultMap>
    <sql id="Base_Column_List" >
      Name, TrueName, Pass
    </sql>

    <select id="findUserById" parameterType="int" resultType="com.mozi.entity.WebUser" >
        select * from WebUsers where id=#{id}
    </select>
    
    <select id="findUserByName" parameterType="java.lang.String" resultType="com.mozi.entity.WebUser" >
        select * from WebUsers where Name LIKE '%${value}%'
    </select>
    
    <select id="findUserByName2" parameterType="java.lang.String" resultMap ="BaseResultMap" >
        select * from WebUsers where Name LIKE '%${value}%'
    </select>
    
    <!-- 添加用户 -->
    <insert id="insertUser" parameterType="com.mozi.entity.WebUser" >
    <!--
     使用mysql的uuid(),实现非自增主键的返回。
      执行过程:通过uuid()得到主键,将主键设置到user对象的Id的属性中,其次,在insert执行时,从user对象中取出Id属性值;
    -->
      insert into WebUsers (Name,TrueName,Pass) values(#{name},#{trueName},#{pass})
    </insert>
    
    <!-- 删除用户 -->
    
    <delete id="deleteUser" parameterType="java.lang.String">
        delete from WebUsers where Name=#{name}
    </delete>
    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.mozi.entity.WebUser">
        update WebUsers set Name=#{name},TrueName=#{trueName},Pass=#{pass}
        where Name=#{name}
    </update>
</mapper>

 

3、代码

WebUser.java

package com.mozi.entity;

public class WebUser {
    private String name;
    private String trueName;
    private String pass;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTrueName() {
        return trueName;
    }
    public void setTrueName(String tureName) {
        this.trueName = tureName;
    }
    public String getPass() {
        return pass;
    }
    public void setPass(String pass) {
        this.pass = pass;
    }
    @Override
    public String toString() {
        return "WebUser [Name=" + name + ", TureName=" + trueName + ", Pass=" + pass + "]";
    }
    
    
}

 IWebUserDao.java

package com.mozi.dao;

import java.util.List;
import com.mozi.entity.*;

public interface IWebUserDao {
    /**根据用户名称模糊查询用户信息*/
    public List<WebUser> findUserByName(String username);

    /** 添加用户*/
    public void insertUser(WebUser user);

    /** 根据ID删除用户*/
    public void deleteUser(String id);

    /** 根据ID更新用户*/
    public void updateUser(WebUser user);
}

WebUserDaoMybatis.java

package com.mozi.dao.impl;

import static org.junit.Assert.*;

import java.io.IOException;
import java.io.InputStream;

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;

import com.mozi.dao.IWebUserDao;
import com.mozi.entity.WebUser;

import java.util.ArrayList;
import java.util.List;

public class WebUserDaoMybatis implements IWebUserDao {

    //查询用户
    @Override
    public List<WebUser> findUserByName(String username) {
        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = null;
        SqlSession sqlSession = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            // 1.创建会话工场,传入mybatis的配置文件信息
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);

            // 2.通过工厂得到SqlSession
            sqlSession = sqlSessionFactory.openSession();

            // 3.通过sqlSession操作数据库
            // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id;
            // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数;
            // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象;
            List<Object> userList = (List) sqlSession.selectList("src.main.resource.userMapper.findUserByName2", "aa");
            if(userList!=null)
            {
                List<WebUser> result=new ArrayList<WebUser>();
                for(Object obj :userList){
                    WebUser user = (WebUser)obj;
                    result.add(user);
                }
                return result;
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return null;
    }
    
    // 添加用户
    @Override
    public void insertUser(WebUser user) {
        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = null;
        SqlSession sqlSession = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            // 1.创建会话工场,传入mybatis的配置文件信息
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
            // 2.通过工厂得到SqlSession
            sqlSession = sqlSessionFactory.openSession();
            
            // 3.通过sqlSession操作数据库
            // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id;
            // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数;
            // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象;
            sqlSession.insert("src.main.resource.userMapper.insertUser", user);
            //执行提交事务
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 根据Id删除用户
    @Override
    public void deleteUser(String id) {
        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = null;
        SqlSession sqlSession = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            // 1.创建会话工场,传入mybatis的配置文件信息
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
            // 2.通过工厂得到SqlSession
            sqlSession = sqlSessionFactory.openSession();
            // 3.通过sqlSession操作数据库
            // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id;
            // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数;
            // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象;
            //传入Id,删除用户
            sqlSession.delete("src.main.resource.userMapper.deleteUser", id);
            //执行提交事务
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    // 根据Id更新用户信息
    @Override
    public void updateUser(WebUser user) {
        // mybatis的配置文件
        String resource = "SqlMapConfig.xml";
        InputStream inputStream = null;
        SqlSession sqlSession = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
            // 1.创建会话工场,传入mybatis的配置文件信息
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
                    .build(inputStream);
            // 2.通过工厂得到SqlSession
            sqlSession = sqlSessionFactory.openSession();

            // 3.通过sqlSession操作数据库
            // 第一个参数:映射文件中的statement的Id,等于namespace + "." + statement的id;
            // 第二个参数:指定和映射文件中所匹配的parameterType类型的参数;
            // sqlSession.selectOne结果是与映射文件所匹配的resultType类型的对象;
            //更具Id更新用户
            sqlSession.update("src.main.resource.userMapper.updateUser", user);
            //执行提交事务
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 

posted @ 2017-01-12 11:19  小李飞刀86  阅读(141)  评论(0编辑  收藏  举报