栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MyBatis的Dao层开发——在控制台输入输出实现增删改查(IDEA软件)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MyBatis的Dao层开发——在控制台输入输出实现增删改查(IDEA软件)

MyBatis的Dao层开发有两种方式:1. 传统开发方式 2. 代理开发方式

1. 传统开发方式(直接访问映射xml文件的方式)

具体操作顺序:

           1. 首先创建工具类 MyBatisUtils  ,减少重复代码

           2在 UserMapper.xml 中写下需要的sql语句

           3. 在UserDaoImpl中写具体的实现类,同时创建UserDao接口(主要是规范)

           4. 在MyBatisTest(即增删改查处)调用接口 UserDao 中的方法。

MyBatisUtils 

工具类
public class MyBatisUtils {
    static  private SqlSessionFactory sqlSessionFactory = null ;
    static {
      try {
          //获得核心配置文件
          InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
          //获得session工厂对象
          sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
      }catch (Exception e){
           e.printStackTrace();
          }
    }
    public  static  SqlSession getSession(){
        return sqlSessionFactory.openSession() ;
    }
}

根据用户名查询

实现类
//根据用户名查询信息
    public User queryByName(String username){
        SqlSession ss = MyBatisUtils.getSession(false);
        User user = ss.selectOne("userMapper.findByName",username);
        ss.close();
        return user;
    }
测试类
public void  test3() throws IOException {
        UserDaoImpl ud = new UserDaoImpl();
        Scanner input = new Scanner(System.in);
        System.out.println("用户名:");
        String username = input.nextLine();
        User user = ud.queryByName(username);
        System.out.println(user);
    }

增加用户操作

实现类
//增加用户
    public  int insertUser(User user){

        Scanner input = new Scanner(System.in);
        System.out.println("用户名:");
        String username = input.nextLine();
        System.out.println("密码:");
        String password = input.nextLine();

        user.setUsername(username);
        user.setPassword(password);

        SqlSession ss = MyBatisUtils.getSession(true);
        int row1 = ss.insert("userMapper.save",user);
        ss.close();
        return row1;
    }
测试类
@Test
    public void  test4() throws IOException {
        UserDaoImpl ud = new UserDaoImpl();
        User user = new User();
        int row = ud.insertUser(user);
        System.out.println(row);
    }

2. 代理开发方式(接口代码+映射规则+xml映射文件)

     采用 Mybatis 的代理开发方式实现 DAO 层的开发,这种方式是企业开发的主流。


     Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis 框架根         据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
   

Mapper 接口开发需要遵循以下规范:
            1、 Mapper.xml文件中的namespace与mapper接口的全限定名相同
            2、 Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
            3、 Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
          4、 Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同

具体操作顺序:

         1. 首先在 UserMapper2.xml 中写下需要的sql语句

         2. 创建UserMapper接口

         3. 在MyBatisTest(即增删改查处)调用接口 UserMapper 的方法

遇到的问题:

1. 代理开发中 由于接口 UserMapper 没有对应的实现类,如何知道接口 UserMapper 中的方法就是在 UserMapper2.xml的方法

       解决办法:在 UserMapper2.xml 中的 指定了对应的接口名。

2. 在用户修改操作中控制台显示用户信息更改成功,但是在数据库中信息却没有被修改

      解决办法:在最后没有写执行事务操作 sqlSession.commit();

修改操作updateUser

@Test
    public  void test5() throws IOException {

        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper um = sqlSession.getMapper(UserMapper.class); //根据类类型获取实例

        Scanner input = new Scanner(System.in);
        System.out.println("ID:");
        String id = input.nextLine();
        System.out.println("用户名:");
        String username = input.nextLine();
        System.out.println("密码:");
        String password = input.nextLine();

        User user = new User();

        user.setId(Integer.parseInt(id));
        user.setUsername(username);
        user.setPassword(password);

        int row2 = um.updateUser(user);
        sqlSession.commit();//执行事务操作
        System.out.println(row2);
        sqlSession.close();

    }

删除操作 delUser

@Test
    public  void test6() throws IOException {

        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper um = sqlSession.getMapper(UserMapper.class); //根据类类型获取实例

        Scanner input = new Scanner(System.in);
        System.out.println("用户名:");
        String username = input.nextLine();

        User user = new User();
        user.setUsername(username);

        um.delUser(username);
        sqlSession.commit();//执行事务操作
        sqlSession.close();

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/872845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号