myBatis基础配置入门

一、首先都是对jar包进行加载 https://github.com/mybatis/mybatis-3/releases

mybatis-3.4.4.jar  (mybatis jar包)
mysql-connector-java-5.1.7-bin.jar  (链接数据库Jar包)


二、核心配置文件的创建:

模板在下载的mybatis源码包中有:路径如下:

E:\download\mybatis-3-mybatis-3.4.5\src\test\java\org\apache\ibatis\submitted\complex_property\Configuration.xml

以及改目录下的javabean模型映射文件:User.xml

 

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>
  <settings>
    <setting name="useGeneratedKeys" value="false"/>
    <setting name="useColumnLabel" value="true"/>
  </settings>

  <typeAliases>
    <typeAlias alias="UserAlias" type="com.lin.model.User"/>
  </typeAliases>

  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC">
        <property name="" value=""/>
      </transactionManager>
      <dataSource type="UNPOOLED">
        <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///mybatis01?useUnicode=true&amp;characterEncoding=utf-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123"/>
      </dataSource>
    </environment>
  </environments>

  <mappers>
    <mapper resource="com/lin/model/User.xml"/>  <!--引入映射文件-->
  </mappers>

</configuration>

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">

<mapper namespace="com.lin.dao.IUser"> <!--为避免多人开发时namespace命名冲突,这里用接口IUser来实现-->
	<!--resultMap是对javabean对象的映射 该对象就id、userName、Password三个属性-->
  <resultMap type="UserAlias" id="UserResult">   
    <id column="id" jdbcType="INTEGER" property="id"/>
    <result column="USERNAME" jdbcType="VARCHAR" property="userName"/>
    <result column="PASSWORD" jdbcType="VARCHAR" property="Password"/>
  </resultMap> 


  <!--查询全部-->
  <select id="queryUserList" parameterType="long" resultMap="UserResult">
    SELECT * FROM user WHERE id != 0
  </select>

  <!--查询一条-->
  <select id="queryOne" parameterType="long" resultMap="UserResult">
    select <include refid="value"/> from USER where id=1
  </select>
  <sql id="value">id,userName,Password</sql>
  <!--sql标签可以用于设置常量,提供给多出调用-->

  <!--模糊查询-->          <!--parameterType表示这里传入了改类型的参数  resultMap是返回值类型-->
  <select id="queryUsers" parameterType="com.lin.model.User" resultMap="UserResult">
    SELECT * FROM USER
    <where>
      <if test="userName !=null and !&quot;&quot;.equals(userName.trim())">
        and userName LIKE '%' #{userName} '%'
      </if>
      <if test="password !=null and !&quot;&quot;.equals(password.trim())">
        and password like '%' #{Password} '%'
      </if>
    </where>
    /*where标签在最后拼接时会把最前面的and 删除,保证sql语句是正确的*/
   <!-- <trim prefix="where" prefixOverrides="and/or">
    这样trim标签就相当于where标签
    </trim>
    -->
  </select>

  <!--删除一条-->
  <delete id="deleteOne" parameterType="int" >
    DELETE FROM USER where ID = #{_parameter} 
<!--int类型统一写法 #{_parameter} 传入的是个int型参数-->
  </delete>

  <!--批量删除-->
  <delete id="deleteBatch" parameterType="java.util.List">
  DELETE FROM USER WHERE ID IN (
  <foreach collection="list" item="item" separator=",">
    #{item}
  </foreach>
<!--传入的是个List数组类型 parameterType="java.util.List" 用
foreach遍历,separator=“,”属性表示在拼接sql语句时会自动将末尾的逗号删除,保证sql语法正确-->
) </delete> <!-- 插入 --> <insert id ="insertUser" parameterType ="com.lin.model.User" > insert into USER (username,password) values (#{userName},#{Password}); </insert> <!-- <insert id="insertUser" parameterType="com.lin.model.User" useGeneratedKeys="true" > INSERT INTO USER ( userName, Password ) VALUES ( #{userName}, #{Password} ) </insert>--> <update id ="updateUser" keyProperty ="com.lin.model.User" > update User set userName=#{userName},password=#{password} where id=#{id} <set> <!-- <if test="userName!=null and !&quot;&quot;.equals(userName.trim())"> userName=#{userName}, </if> <if test="Password!=null and !&quot;&quot;.equals(Password.trim())"> Password=#{password} </if>--> </set> <!--set 标签在最后拼接时会把最后一个逗号删除 --> <!-- <trim prefix="set" prefixOverrides=","> </trim> 这样的 trim 标签就相当于 set 标签 --> </update> <!-- <select id="version" parameterType="long" resultType="int"> SELECT version FROM user WHERE id = #{id,jdbcType=INTEGER} </select>--> <!-- <delete id="delete" parameterType="UserAlias"> DELETE FROM user WHERE id = #{id:INTEGER} </delete>--> <!-- <insert id="insert" parameterType="UserAlias" useGeneratedKeys="false"> INSERT INTO user ( id, username, password, administrator ) VALUES ( #{id}, #{username,jdbcType=VARCHAR}, #{password.encrypted:VARCHAR}, #{administrator,jdbcType=BOOLEAN} ) </insert>--> <!-- <update id="update" parameterType="UserAlias"> UPDATE user SET username = #{username,jdbcType=VARCHAR}, password = #{password.encrypted,jdbcType=VARCHAR}, administrator = #{administrator,jdbcType=BOOLEAN} WHERE id = #{id,jdbcType=INTEGER} </update>--> <!-- Unique constraint check --> <!-- <select id="isUniqueUsername" parameterType="map" resultType="boolean"> SELECT (count(*) = 0) FROM user WHERE ((#{userId,jdbcType=BIGINT} IS NOT NULL AND id != #{userId,jdbcType=BIGINT}) OR #{userId,jdbcType=BIGINT} IS NULL) &lt;!&ndash; other than me &ndash;&gt; AND (username = #{username,jdbcType=VARCHAR}) </select>--> </mapper>

三、数据库连接工具类:(整合Spring后可以通过spring来管理该对象)

package com.lin.DButil;
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 java.io.IOException;
import java.io.Reader;
/**
 * Created by lin on 2017/9/19.
 */
public class DbAccess {
    public SqlSession getSqlSession() throws IOException {
        //通过配置文件得到Reader对象
        Reader reader=Resources.getResourceAsReader("com/lin/config/Configuration.xml");
        //通过reader获取SqlSessionFactory
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
        //通过SqlSessionFactory打开一个数据库会话
        SqlSession sqlSession=factory.openSession();
        return sqlSession;
    }
}

四、IUser接口具体代码实现:

package com.lin.dao;
import com.lin.model.User;
import java.util.List;
/**
 * Created by lin on 2017/9/22.
 * 实现接口,接口中函数名就是User.xml配置文件中对应那个CRUD操作ID值 
 *  返回值类型就是操作数据库返回值类型  参数就是操作数据库需要的参数
 *
 *myBatis自动实现user.xml配置文件和该接口之间的对接,所有不需要我们自己写实现类去实现该接口,
在Dao层中通过sqlSession.getMapper(IUser.class)就可以得到IUser接口实现的对象,直接调用接口中的方法
 * IUser iUser=sqlSession.getMapper(IUser.class);//该方法底层的实现是通过泛型,传入什么类型对
象(Object.class)返回的就是对应的Object对象
* users=iUser.queryUserList(); */ public interface IUser { // 对应的是 user.xml id queryUserList select 标签语句 public List<User> queryUserList () ; public User queryOne (User user) ; public List<User> queryUsers (User user) ; // 模糊查询 public int deleteOne ( int id) ; public int deleteBatch (List<String> list) ; public int insertUser (User user) ; public int updateUser (User user) ; }

五、Dao层调用代码和测试代码:



package com.lin.dao;
import com.lin.DButil.DbAccess;
import com.lin.model.User;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class userDao {
    public List<User> getUser(){
    List<User> users=new ArrayList<>();
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try {
            sqlSession =dbAccess.getSqlSession();
            //sqlSession执行操作
            //users=sqlSession.selectList("User.queryUserList");
            IUser iUser=sqlSession.getMapper(IUser.class); //通过接口实现对配置文件中的查询进行操作,这样有利于避免多人开发是namespace冲突问题
            users=iUser.queryUserList();
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(sqlSession!=null)
                sqlSession.close();
        }
        return users;
    }

    public User selectOne(){
        User user=new User();
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try {
            sqlSession =dbAccess.getSqlSession();
            User u=new User();
            u.setId(1);
            //sqlSession执行操作
            //在不通过IUser接口来代替namespace,直接给namespace取值User时的执行方式:
            //user=sqlSession.select("User.queryOne");
            
            //通过接口实现对配置文件中的查询进行操作,这样有利于避免多人开发是namespace冲突问题
            IUser iUser=sqlSession.getMapper(IUser.class);
            user=iUser.queryOne(u);
            sqlSession.commit();
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(sqlSession!=null)
                sqlSession.close();
        }
        return user;
    }

    public List<User> selectUser(String name,String password){ //模糊查询
        List<User> users=new ArrayList<>();
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try {
            sqlSession =dbAccess.getSqlSession();
            //sqlSession执行操作
            User u=new User();
            u.setUserName(name);
            u.setPassword(password);
            //users=sqlSession.selectList("User.queryUsers",u); //namespace不用结果实现,而直接起名为User时的写法
            //面向接口编程,将上面一行换成下面两行
            IUser iUser=sqlSession.getMapper(IUser.class); //面向接口编程 通过接口实现
            users=iUser.queryUsers(u);
            sqlSession.commit();
            System.out.println("查询数量"+users.size());
            if(users.size()>0){
                for(int i=0;i<users.size();i++){
                    System.out.println(users.get(i).getId()+" "+users.get(i).getUserName()+" "+users.get(i).getPassword());
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(sqlSession!=null)
                sqlSession.close();
        }
        return users;
    }

    public void deleteOne(int id){  //单条删除
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try{
            sqlSession=dbAccess.getSqlSession();
            //int a=sqlSession.delete("User.deleteOne",id);
            IUser iUser=sqlSession.getMapper(IUser.class);
            int a=iUser.deleteOne(id);
            sqlSession.commit();
            System.out.println("删除情况:"+a);
        }catch(IOException e){
            e.printStackTrace();
        }finally {
            if(sqlSession!=null)
            sqlSession.close();
        }
    }

    public void deleteBatch(List<String> list){ //批量删除
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try{
            sqlSession=dbAccess.getSqlSession();
            //int a=sqlSession.delete("User.deleteBatch",list);
            IUser iUser=sqlSession.getMapper(IUser.class);
            int a=iUser.deleteBatch(list);
            System.out.println("批量删除:"+a);
            sqlSession.commit();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

    public void insertUser(User user){
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try{
            sqlSession=dbAccess.getSqlSession();
            //int a=sqlSession.insert("User.insertUser",user);
            IUser iUser=sqlSession.getMapper(IUser.class);
            int a=iUser.insertUser(user);
            System.out.println("插入user"+a);
            sqlSession.commit();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

    public void updateUser(User user){
        DbAccess dbAccess=new DbAccess();
        SqlSession sqlSession=null;
        try{
            sqlSession=dbAccess.getSqlSession();
            //int a=sqlSession.update("User.updateUser",user);
            IUser iUser=sqlSession.getMapper(IUser.class);
            int a=iUser.updateUser(user);
            System.out.println("修改人数:"+a+"");
            sqlSession.commit();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            sqlSession.close();
        }
    }

    @Test
    public void testUser(){

        List<User> users=getUser();
        System.out.println("人数"+users.size());
        for(User u:users){
            System.out.println(u.getUserName());
        }
    }

    @Test
    public void selectone(){
        User user=selectOne();
        System.out.println(user.getId()+" "+user.getUserName());
    }

    @Test
    public void testSelectUser()
    {
        selectUser("c","12");
    }

    @Test
    public void testDeleteOne(){
        //deleteOne(18);
        List<String> list=new ArrayList<>();
        list.add("20");
        list.add("17");
        list.add("19");
        deleteBatch(list);
    }

    @Test
    public void testInsert()
    {
        User user=new User();
       // user.setId(7);
        user.setUserName("8cscs上传");
        user.setPassword("123456");
        insertUser(user);
    }

    @Test
    public void testUpdate()
    {
        User u=selectUser("5","38").get(0);
        System.out.println("修改用户"+u.getId());
        u.setUserName("update执行");
        updateUser(u);
    }

}





猜你喜欢

转载自blog.csdn.net/aaronlin6/article/details/78072459