• Mybatis使用原始dao开发


    存在的问题:

    1、Dao方法体存在重复代码:通过SqlSessionFactory创建SqlSession,调用SqlSession的数据库操作方法
    2、调用sqlSession的数据库操作方法需要指定statement的id,这里存在硬编码,不得于开发维护。

    sql映射文件

    <mapper namespace="xx">
         <!-- 根据id查询 -->
        <select id="queryUserById" parameterType="int" resultType="com.mybatis.entity.User" >
            select *  from  t_user where id = #{id}
        </select>
        <!-- 查询所有用户 -->
        <select id="findAll" resultType="com.mybatis.entity.User">
            select * from t_user
        </select>
        <!-- 根据姓名模糊查询 -->
        <select id="findListByName" parameterType="String" resultType="com.mybatis.entity.User">
            select * from t_user where username like '%${value}%'
        </select>
        <!-- 添加 -->
        <insert id="insertUser" parameterType="com.mybatis.entity.User" >
            insert into t_user values(sep_user.nextval,#{username},#{password},#{sex},#{brithday},#{address})
        </insert>
        <!-- 删除 -->
        <delete id="deleteUser" parameterType="int">
            delete from t_user where id = #{id}
        </delete>
        <!-- 修改 -->
        <update id="updateUser" parameterType="com.mybatis.entity.User">
            update t_user set username = #{username},password = #{password},sex = #{sex},brithday = #{brithday},
            address = #{address} where id = #{id}
        </update>
    </mapper>

    UserDao接口:

    //根据id查询用户
    User selectUser(int id);
        
    //查询所有用户
    List<User> findAll();
        
    //根据姓名模糊查询
    List<User> selectUserByName(String username);
        
    //添加用户(其中返回类型可以改为void)
    int insertUser(User user);
        
    //修改用户
    int updateUser(User user);
        
    //根据id删除用户
    int deleteUser(int id);

    定义一个MybatisUtil工具类,用于创建SqlSession:

    public class MybatisUtil {
        //将sqlsession工厂定义在外面,方便获取sqlsession方法,
        private static SqlSessionFactory sqlSessionFactory ;
        
        //静态方法,调用直接创建
        static{
            InputStream in = null;
            try {
                in = Resources.getResourceAsStream("mybatis-config.xml");
                SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
                sqlSessionFactory = builder.build(in);
            
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        //打开sqlsession
        public static SqlSession openSession(){
            return sqlSessionFactory.openSession();
        }

    UserDaoImpl实现类:

       //根据id查询
        @Override
        public User selectUser(int id) {
            SqlSession sqlSession = MybatisUtil.openSession();
            User user = sqlSession.selectOne("xx.queryUserById", id);
            sqlSession.close();
            return user;
        }
        //查询所有用户
        @Override
        public List<User> findAll() {
            SqlSession sqlSession = MybatisUtil.openSession();
            List<User> user = sqlSession.selectList("xx.findAll");
            sqlSession.close();
            return user;
        }
        //根据姓名模糊查询
        @Override
        public List<User> selectUserByName(String username) {
            SqlSession sqlSession = MybatisUtil.openSession();
            List<User> user = sqlSession.selectList("xx.findListByName", username);
            sqlSession.close();
            return user;
        }
        //添加用户
        @Override
        public int insertUser(User user) {
            SqlSession sqlSession = MybatisUtil.openSession();
            int i = sqlSession.insert("xx.insertUser",user);
            sqlSession.commit();
            sqlSession.close();
            return i;
        }
        //修改用户
        @Override
        public int updateUser(User user) {
            SqlSession sqlSession = MybatisUtil.openSession();
            int i = sqlSession.update("xx.updateUser",user);
            sqlSession.commit();
            sqlSession.close();
            return i;
        }
        //删除用户
        @Override
        public int deleteUser(int id) {
            SqlSession sqlSession = MybatisUtil.openSession();
            int i = sqlSession.delete("xx.deleteUser",id);
            sqlSession.commit();
            sqlSession.close();
            return i;
        }

    实现类中大量重复代码,

    测试类:

    //调用实现类中的方法:
    UserDao userDao = new UserDaoImpl();
    //根据id查找 //User user = userDao.selectUser(25); //System.out.println(user); //查询所有的商品 /*List<User> list = userDao.findAll(); for (User user : list) { System.out.println(user); }*/ //按条件模糊查询 /*List<User> list = userDao.selectUserByName("李四"); for (User user : list) { System.out.println(user); }*/ //添加 /*User user = new User(); user.setUsername("张三"); user.setPassword("666"); user.setSex("男"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); user.setBrithday(sdf.parse("1998-9-1")); user.setAddress("泰和"); int i= userDao.insertUser(user); System.out.println("执行了"+i);*/ //修改 /*User user = new User(); user.setUsername("啊啊"); user.setPassword("666"); user.setSex("男"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd"); user.setBrithday(sdf.parse("1998-9-1")); user.setAddress("深圳"); user.setId(25); int i= userDao.updateUser(user); System.out.println("执行了"+i);*/ //删除 int i= userDao.deleteUser(25); System.out.println("执行了"+i);
  • 相关阅读:
    模-数(A/D)转换器
    数-模(D/A)转换器
    VIM 常用命令
    Linux常用命令
    一个开关电源传导、辐射处理案例-----Layout环路
    解决:PADS导入.DXF结构图出现坐标超出范围问题
    Python3-threading模块-多线程
    Python3-socketserver模块-网络服务器框架
    Python3-socket模块-低级网络接口
    Python3-面向对象
  • 原文地址:https://www.cnblogs.com/64Byte/p/12991314.html
Copyright © 2020-2023  润新知