zl程序教程

您现在的位置是:首页 >  后端

当前栏目

MyBatis框架:第三章:传统方式mybatis的增,删,改,查实现

mybatis框架 实现 方式 传统 第三章
2023-06-13 09:13:27 时间

传统方式mybatis的增,删,改,查实现

准备工作 创建java Project项目,建库建表插入数据,到数据库中执行,导入jar包 添加mybatis的核心jar 添加mysql数据库连接驱动 添加log4j日记需要的核心jar 在config目录下添加 log4j.propreties代码:

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

开始编写 在config目录下添加 mybatis-config.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 是配置多个jdbc环境 
        default表示使用的默认环境 
     -->
    <environments default="development">
        <!-- 
            environment 标签用来配置一个环境 
                id 是环境的标识
         -->
        <environment id="development">
            <!-- 
                transactionManager	配置使用什么样类型的数据库事务管理
                     type="JDBC"  	表示启用事务,有commit和rollback操作
                     type="MANAGED" 表示不直接控制事务。交给容器处理几乎不用。
             -->
            <transactionManager type="JDBC" />
            <!-- 
                dataSource标签配置连接池
                    type="POOLED"	表示启用数据库连接池
                    type="UNPOOLED"	表示不启用数据库连接池
             -->
            <dataSource type="POOLED">
                <!-- 连接数据库的驱动类 -->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <!-- 数据库访问地址 -->
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <!-- 数据库用户名 -->
                <property name="username" value="root" />
                <!-- 数据库密码 -->
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 导入mapper配置文件 -->
        <mapper resource="com/pojo/UserMapper.xml" />
    </mappers>
</configuration>

创建一个UserDao接口

public interface UserDao {
    // 保存用户
    public int saveUser(User user);    
    // 更新用户
    public int updateUser(User user);    
    // 根据id删除用户
    public int deleteUserById(int id);    
    // 根据id搜索用户
    public User findUserById(int id);    
    // 搜索全部用户
    public List<User> findUsers();    
}

编写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">
  <!-- 
      namespace属性是名称空间的意思。
      功能相当于 给配置文件定义一个包名。
      一般情况下。可以写两种值,一种是对应类的全类名
      一种情况是。对应类的处理接口全类名
   -->
<mapper namespace="com.pojo.User">
    <!-- 插入用户
    parameterType 属性设置参数类型
    id 为使用的标识
     -->
    <insert id="saveUser" parameterType="com.pojo.User">
        insert into t_user(last_name,sex) values(#{lastName},#{sex})
    </insert>
    <!-- 更新用户 
    parameterType 属性设置参数类型
    id 为使用的标识
    -->
    <update id="updateUser" parameterType="com.pojo.User">
        update t_user
            set
        last_name = #{lastName},
        sex = #{sex}
            where
        id = #{id}
    </update>
    <!-- 根据id删除用户
    parameterType 属性设置参数类型
    id 为使用的标识        
     -->
    <delete id="deleteUserById" parameterType="int">
        delete from t_user where id = #{id}
    </delete>
    <!-- 根据id搜索用户
    parameterType 属性设置参数类型
    id 为使用的标识 
    resultType 属性是返回的类型
     -->
    <select id="findUserById" parameterType="int" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user where id = #{id}
    </select>
    <!-- 搜索全部用户
    id 为使用的标识 
    resultType 属性是返回的类型
     -->
    <select id="findUsers" resultType="com.pojo.User">
        select id,last_name lastName,sex from t_user
    </select>
</mapper>

UserDaoImpl代码:

public class UserDaoImpl implements UserDao {

    SqlSessionFactory sqlSessionFactory;

    public UserDaoImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }
    
    @Override
    public int saveUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int result = 0;
        try {
            result = sqlSession.insert("com.pojo.User.saveUser", user);
            //提交事务
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
        return result;
    }

    @Override
    public int updateUser(User user) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int result = 0;
        try {
            result = sqlSession.update("com.pojo.User.updateUser", user);
            //提交事务
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
        return result;
    }

    @Override
    public int deleteUserById(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        int result = 0;
        try {
            result = sqlSession.delete("com.pojo.User.deleteUserById", id);
            //提交事务
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
        return result;
    }

    @Override
    public User findUserById(int id) {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        User result = null;
        try {
            result = sqlSession.selectOne("com.pojo.User.findUserById", id);
            //提交事务
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
        return result;
    }

    @Override
    public List<User> findUsers() {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        List<User> result = null;
        try {
            result = sqlSession.selectList("com.pojo.User.findUsers");
            //提交事务
            sqlSession.commit();
        } finally {
            sqlSession.close();
        }
        return result;
    }
}

测试类:

public class UserDaoTest {

    static UserDao userDao;

    /**
     * @BeforeClass标注的方法会在所有测试之前执行之前执行一次
     * @throws Exception
     */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        String url = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(url);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        userDao = new UserDaoImpl(sqlSessionFactory);
    }

    @Test
    public void testSaveUser() {
        userDao.saveUser(new User(null,"admins",0));
    }

    @Test
    public void testUpdateUser() {
        userDao.updateUser(new User(2, "admin", 1));
    }

    @Test
    public void testDeleteUserById() {
        userDao.deleteUserById(2);
    }

    @Test
    public void testFindUserById() {
        System.out.println(userDao.findUserById(1));
    }

    @Test
    public void testFindUsers() {
        System.out.println(userDao.findUsers());
    }
}