myBatis基础配置入门

来源:互联网 发布:网络推广专员工作内容 编辑:程序博客网 时间:2024/05/17 08:59

一、首先都是对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.xmlidqueryUserListselect标签语句 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);    }}





原创粉丝点击