首页 > 代码库 > mybatis(二)执行CRUD操作的两种方式配置和注解

mybatis(二)执行CRUD操作的两种方式配置和注解

一、使用MyBatis对表执行CRUD操作——基于XML的实现

1、定义sql映射xml文件

  userMapper.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.mi.mapping.UserInfoMapper">         <select id="getUser" resultType="com.mi.entity.User">        SELECT id,user_name userName,age FROM user_t where id=1    </select>         <!-- 创建用户(Create) -->    <insert id="addUser" parameterType="com.mi.entity.User">        insert into user_t(id,user_name,password,age) values(11,#{userName},0,#{age})    </insert>        <!-- 删除用户(Remove) -->    <delete id="deleteUser" parameterType="int">        delete from user_t where id=#{id}    </delete>        <!-- 修改用户(Update) -->    <update id="updateUser" parameterType="com.mi.entity.User">        update user_t set user_name=#{userName},age=#{age} where id=#{id}    </update>        <!-- 查询全部用户-->    <select id="getAllUsers" resultType="com.mi.entity.User">        select * from user_t    </select></mapper>
package com.mi.demo;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.mi.entity.User;public class TestCRUDByXmlMapper {    @Test    public void testAdd(){        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);        String statement = "com.mi.mapping.UserInfoMapper.addUser";        User user = new User();        user.setUserName("xinzhao");        user.setAge(20);                int insertResult = sqlSession.insert(statement,user);        sqlSession.close();        System.out.println(insertResult);    }        @Test    public void testUpdate(){        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);        String statement = "com.mi.mapping.UserInfoMapper.updateUser";                User user = new User();        user.setId(11);        user.setUserName("xinzhao");        user.setAge(22);        int result = sqlSession.update(statement, user);        sqlSession.close();        System.out.println(result);    }        @Test    public void testDelete(){        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);        String statement = "com.mi.mapping.UserInfoMapper.deleteUser";        User user = new User();        user.setId(11);        int result = sqlSession.delete(statement, user);        sqlSession.close();        System.out.println(result);    }        @Test    public void testGetAll(){        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);        String statement = "com.mi.mapping.UserInfoMapper.getAllUsers";        List<User> userList = sqlSession.selectList(statement);        sqlSession.close();        for(User user : userList){            System.out.println(user.getUserName());        }    }    }

二、使用MyBatis对表执行CRUD操作——基于注解的实现

  1、定义sql映射的接口

  UserMapper接口的代码如下:

package com.mi.demo;import java.util.List;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;import com.mi.entity.User;public interface UserMapper {    @Insert(" insert into user_t(id,user_name,password,age) values(11,#{userName},0,#{age})")    public int addUser(User user);        @Delete("delete from user_t where id=#{id}")    public int deleteById(int id);        @Update("update user_t set user_name=#{userName},age=#{age} where id=#{id}")    public int update(User user);        @Select("SELECT id,user_name userName,age FROM user_t where id=1")    public User getById(int id);        @Select("select * from user_t")    public List<User> getAll();}

2、在conf.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>    <environments default="development">        <environment id="development">            <transactionManager type="JDBC" />            <!-- 配置数据库连接信息 -->            <dataSource type="POOLED">                <property name="driver" value="com.mysql.jdbc.Driver" />                <property name="url" value="jdbc:mysql://localhost/mi" />                <property name="username" value="root" />                <property name="password" value="dbdaocom" />            </dataSource>        </environment>    </environments>    <mappers>        <mapper resource="com/mi/mapping/UserInfoMapper.xml"/><!-- 注册userMapper.xml文件, -->        <mapper class="com.mi.demo.UserMapper"/><!-- 注册UserMapper映射接口-->    </mappers></configuration>

单元测试类的代码如下:

package com.mi.demo;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import com.mi.entity.User;public class TestCRUDByAnnotationMapper {    @Test    public void testAdd() {        SqlSession sqlSession = MyBatisUtil.getSqlSession(true);        // 得到UserMapperI接口的实现类对象,UserMapperI接口的实现类对象由sqlSession.getMapper(UserMapperI.class)动态构建出来        UserMapper mapper = sqlSession.getMapper(UserMapper.class);        User user = new User();        user.setUserName("用户xdp");        user.setAge(20);        int result = mapper.addUser(user);        sqlSession.close();        System.out.println(result);    }    /**     * ...the end     */}

用到的MyBatisUtil工具类代码如下:

package com.mi.demo;import java.io.InputStream;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;public class MyBatisUtil {    /**     * 获取SqlSessionFactory     *      * @return SqlSessionFactory     */    public static SqlSessionFactory getSqlSessionFactory() {        // mybatis的配置文件        String resource = "conf.xml";        // 使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)        InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource);        // 构建sqlSession的工厂        SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);        return sessionFactory;    }    /**     * 获取SqlSession     *      * @return SqlSession     */    public static SqlSession getSqlSession() {        return getSqlSessionFactory().openSession();    }    /**     * 获取SqlSession     *      * @param isAutoCommit     *            true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务     *            false表示创建的SqlSession对象在执行完SQL之后不会自动提交事务,这时就需要我们手动调用sqlSession.     *            commit()提交事务     * @return SqlSession     */    public static SqlSession getSqlSession(boolean isAutoCommit) {        return getSqlSessionFactory().openSession(isAutoCommit);    }}

 

mybatis(二)执行CRUD操作的两种方式配置和注解