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

mybatis

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

mybatis

目录 1通过dao和映射文件关联完成操作---企业开发模式 1.1如何实现 1.2 安装mybatis插件 2传递多个参数 2.1如何实现 3添加是如何返回递增的主键值 4解决列名和属性名不一致 5动态sql 5.1什么是动态sql 5.2为什么要使用动态sql 5.3mybatis中动态sql标签有哪些 5.4 if标签--单条件判断 5.5 choose标签 多条件分支判断 5.6 where标签

1通过dao和映射文件关联完成操作---企业开发模式

之前使用sqlsession封装的一些方法可以完成crud操作,但是sqlsession封装的方法传递的参数statement传递占位符的参数只能传递一个。而且它的方法名都是固定,在开发环境下我们不使用sqlsession封装的方法,而是习惯自己定义的方法,自己调用自己的方法

1.1如何实现

(1)创建一个到接口并定义自己需要的方法

public interface UserDao {
    //查询所有
    public List findAll();
    //dao接口中传递多个参数 使用@param
    public User findOne(@Param("username")String username,@Param("realname")String realname);
    //添加
    public int insert(User user);
    //修改
    public int update(User user);
}

(2)创建映射文件





    
    
        select * from tb_user where username=#{username} and realname=#{realname}
    
    
    
        insert into tb_user values(null,#{username},#{realname})
    
    
        update tb_user set username=#{username},realname=#{realname} where userid=#{userid}
    

(3)测试

@Test
 public void findAll()throws Exception{

    //解析配置文件
    Reader resource = Resources.getResourceAsReader("mybatis.xml");
    SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
    //sqlsession封装了对数据库操作的各种方法
    SqlSession sqlSession = factory.openSession();
    //拿到接口的实现代理类对象
    UserDao mapper = sqlSession.getMapper(UserDao.class);
    List all = mapper.findAll();
    System.out.println(all);
    sqlSession.close();
}
@Test
public void findOne()throws Exception{
   //解析配置文件
   Reader resource = Resources.getResourceAsReader("mybatis.xml");
   SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
   //sqlsession封装了对数据库操作的各种方法
   SqlSession sqlSession = factory.openSession();
   //拿到接口的实现代理类对象
   UserDao mapper = sqlSession.getMapper(UserDao.class);
   User user = mapper.findOne("aaa", "展示");
   System.out.println(user);
   sqlSession.close();
}
@Test
public void insert()throws Exception{
   //解析配置文件
   Reader resource = Resources.getResourceAsReader("mybatis.xml");
   SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
   //sqlsession封装了对数据库操作的各种方法
   SqlSession sqlSession = factory.openSession();
   //拿到接口的实现代理类对象
   UserDao mapper = sqlSession.getMapper(UserDao.class);
   //添加给实体类设置属性
   User user = new User();
   user.setUsername("yyy");
   user.setRealname("嘤嘤怪");
   System.out.println("前"+user);
   int row = mapper.insert(user);
   System.out.println("后"+user);
   //增删改没有提交数据库不改变
   sqlSession.commit();
   System.out.println(row);
   sqlSession.close();
}
@Test
public void update()throws Exception{
   //解析配置文件
   Reader resource = Resources.getResourceAsReader("mybatis.xml");
   SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resource);
   //sqlsession封装了对数据库操作的各种方法
   SqlSession sqlSession = factory.openSession();
   //拿到接口的实现代理类对象
   UserDao mapper = sqlSession.getMapper(UserDao.class);
   User user = new User(35, "eee", "鹅鹅鹅");
   int row = mapper.update(user);
   sqlSession.commit();
   sqlSession.close();
}

常见的bug

namespace和接口名不对应 xml文件没有注册到mybatis配置文件中

映射文件中的标签id和接口中方法名不对应

1.2安装mybatis插件

2传递多个参数

我们在idea接口中某些方法可能需要传递多个参数譬如登录

//dao接口中传递多个参数 使用@param为参数起名
public User findOne(@Param("username")String username,@Param("realname")String realname);
3添加时如何返回递增的主键值

需要返回添加数据库后的id值



    insert into tb_user values(null,#{username},#{realname})
4解决列名和属性名不一致

问题查询是返回一个null 或者某列没有值

可以有两种解决办法

第一种:为查询的列起别名 而别名和属性名一致


    select * from t_student
5动态sql 5.1什么是动态sql

根据参数的值,判断sql的条件

name!=null

select * from 表名 where name=#{name} and address=#{address}

name==null

select * from 表名

5.2为什么要使用动态sql

在初级阶段我们的程序进行数据库操作时,书写的SQL语句都是确定的,就在程序运行前就已经写死了,我们不能根据实时业务对SQL进行实时更改,这样可能导致我们需要为业务编写的SQL语句繁多

5.3mybatis中动态sql标签有哪些

5.4 if标签--单条件判断

    select * from account where 1=1
    
        and name=#{name}
    
    
        and money=#{money}
    
5.5choose标签 多条件分支判断

5.6where标签

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

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

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