mybatis-puls处理crud

简单的CRUD操作

如果我们下面要实现CRUD的基本操作,那么我们该如何实现呢? 在Mybatis中,我们需要编写对应的Dao接口,并在接口中定义相关的
方法,然后提供与该接口相同名称的Dao.xml文件,在文件中填写对应的sql语

句,才能完成对应的操作
在Mybatis­plus中,我们只需要定义接口,然后继承BaseMapper 类即可,此前做的所有操作都是由Mybatis­plus来帮我们完成,不需要创建sql映 射文件
EmpDao.java

在这里插入图片描述
1、插入操作
MyTest.java

public class MyTest {

ApplicationContext context = new ClassPathXmlApplicationContext("sprin g.xml");
private EmpDao empDao = context.getBean("empDao",EmpDao.class);
@Test
public void testInsert(){
Emp emp = new Emp();
emp.seteName("zhangsan");
emp.setJob("Teacher");
emp.setMgr(100);
	emp.setSal(1000.0);
emp.setComm(500.0);
emp.setHiredate(new Date());
emp.setDeptno(10);
int insert = empDao.insert(emp);
System.out.println(insert);
	}
  }


当运行上述代码的时候,大家发现报错了,原因在于你写的实体类的
名称跟表的名称不匹配,因此在实现的是需要添加@TableName注解,指定具 体的表的名称
在这里插入图片描述
上述代码运行通过之后,大家会发现结果能够正常的进行插入,但是在控制台会
打印一个警告信息,说没有@TableId的注解,原因就在于定义实体类的时候并 没有声明其中的主键是哪个列,以及使用什么样的主键生成策略,因此,可以在 类的属性上添加如下注解,来消除此警告

public class Emp
@TableId(value = "empno",type = IdType.AUTO)
private Integer empno; private String eName; private String job; private Integer mgr; private Date hiredate; private Double sal; private Double comm; private Integer deptno;
//set、get、tostring方法省略
}

但是大家会发现,我们在写属性的时候,实体类属性名称跟表的属性
名称并没有一一对应上,那么为什么会完成对应的操作呢? 其实原因就在于mybatis­plus的全局配置
在进行数据插入的是,如果我们输入的时候用的是全字段,那么sql语句中就会 执行如下sql语句:
INSERT INTO tbl_emp ( e_name, job, mgr, hiredate, sal, comm, deptno ) VALUES ( ?, ?, ?, ?, ?, ?, ? )
但是如果我们在插入的时候,将对象中的某些属性值设置为空,那么会是什么效
果呢?

@Test
public void testInsert(){
Emp emp = new Emp();
emp.seteName("zhangsan");
emp.setJob("Teacher");
emp.setMgr(100);
  // emp.setSal(1000.0);
  // emp.setComm(500.0);
// emp.setHiredate(new Date());
// emp.setDeptno(10);
int insert = empDao.insert(emp);
System.out.println(insert);
System.out.println(emp.getEmpno());
}

INSERT INTO tbl_emp ( e_name, job, mgr ) VALUES ( ?, ?, ? ) 大家其实可以看到我们在插入的时候,mybatis­plus会根据我会输入的对象的字 段的个数来动态的调整我们的sql语句插入的字段,这是大家需要注意的 mybatis­plus比较灵活的地方。
2、更新操作

@Test
public void testUpdate(){
Emp emp = new Emp();
emp.setEmpno(1);
emp.seteName("lisi");
emp.setJob("student");
emp.setMgr(100);
emp.setSal(1000.0);
emp.setComm(500.0);
emp.setHiredate(new Date());
emp.setDeptno(10);
int update = empDao.updateById(emp);
System.out.println(update);
}

3、删除操作
在这里插入图片描述

4、查询操作

@Test
public void testselect(){
// 1、根据id查询对象
// Emp emp = empDao.selectById(1);
// System.out.println(emp);
// 2、根据实体包装类查询单个对象,返回的结果集有且仅能有一个对象
// QueryWrapper<Emp> emp = new QueryWrapper<Emp>();
// emp.eq("empno",2).eq("e_name","zhangsan");
// Emp emp1 = empDao.selectOne(emp);
// System.out.println(emp1);

	// 3、通过多个id值进行查询
// List<Emp> list = empDao.selectBatchIds(Arrays.asList(1, 2, 3));
// for (Emp emp : list) {
// System.out.println(emp);
  // }

	// 4、通过map封装进行条件查询
// Map<String,Object> map = new HashMap<String, Object>();
// map.put("e_name","zhangsan");
  // map.put("sal",1000.0);
// List<Emp> list = empDao.selectByMap(map);
// for (Emp emp : list) {
// System.out.println(emp);
  // }

	// 5、分页查询,需要添加分页插件
	/**
* <property name="plugins">
* <array>
* <bean class="com.baomidou.mybatisplus.extension.plugins.PaginationInt erceptor"></bean>
* </array>
* </property>
	*/

// Page<Emp> empPage = empDao.selectPage(new Page<>(2, 5), null);
// List<Emp> records = empPage.getRecords();
// System.out.println(records);
// 6、根据条件返回查询结果总数
// QueryWrapper<Emp> queryWrapper = new QueryWrapper<>();
// queryWrapper.eq("e_name","zhangsan");
// Integer integer = empDao.selectCount(queryWrapper);
// System.out.println(integer);

	// 7、根据条件查询所有结果返回list集合
// List<Emp> list = empDao.selectList(null);
// for (Emp emp : list) {
// System.out.println(emp);
// }
// 8、根据条件查询结果封装成map的list结构
// List<Map<String, Object>> maps = empDao.selectMaps(null);
// System.out.println(maps);
}

3、Mybatis­plus的相关配置
在mybatis中我们可以在mybatis­config配置文件中可以添加 标签,设置全局的默认策略,在MP中也具备相同的功能,只不过配置方式有所 不同,我们可以在spring.xml文件中添加配置。
https://mp.baomidou.com/config/ 在此链接中包含了非常多的配置项,用户可以按照自己的需求添加需要的配置, 配置方式如下:
spring.xml

 <bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.extension.sp
ring.MybatisSqlSessionFactoryBean">
<property name="configuration" ref="configuration"/> <!‐‐ 非必须 ‐‐>
<property name="globalConfig" ref="globalConfig"/> <!‐‐ 非必须 ‐‐>
......
</bean>
<bean id="configuration" class="com.baomidou.mybatisplus.core.MybatisConf
iguration">
......
</bean>

<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.Glob alConfig">
<property name="dbConfig" ref="dbConfig"/> <!‐‐ 非必须 ‐‐>
	......
 </bean>

 <bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalCo nfig.DbConfig">
	......
</bean>

通过这个配置文件的配置,大家可以进行回想上述问题的出现,
mybatis­plus是如何解决这个问题的呢? 在mybatis­plus中会引入写默认的配置,这个选项的默认配置为true,
因此可以完成对应的实现。 我们可以通过如下配置来禁用驼峰标识的操作,如下所示:

<?xml version="1.0" encoding="UTF‐8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://w ww.springframework.org/schema/beans/spring‐beans.xsd http://www.springframe work.org/schema/context https://www.springframework.org/schema/context/spri ng‐context.xsd http://www.springframework.org/schema/tx http://www.springfr amework.org/schema/tx/spring‐tx.xsd">
<context:property‐placeholder location="classpath:db.properties"></conte xt:property‐placeholder>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${driverClassname}"></property>
<property name="url" value="${url}"></property>
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
</bean>
<bean id="transactionManager" class="org.springframework.jdbc.datasourc e.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>

<tx:annotation‐driven transaction‐manager="transactionManager"></tx:ann otation‐driven>
<bean id="sqlSessionFactoryBean" class="com.baomidou.mybatisplus.extens ion.spring.MybatisSqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis‐config.xml">
</property>
<property name="dataSource" ref="dataSource"></property>
<property name="typeAliasesPackage" value="cn.tulingxueyuan.bean"></pro perty>
<property name="globalConfig" ref="globalConfig"></property>
<property name="configuration" ref="configuration"></property>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="cn.tulingxueyuan.dao"></property>
</bean>
<bean id="configuration" class="com.baomidou.mybatisplus.core.MybatisCo nfiguration">
<property name="mapUnderscoreToCamelCase" value="false"></property>
</bean>
<bean id="globalConfig" class="com.baomidou.mybatisplus.core.config.GlobalConfig">
<property name="dbConfig" ref="dbConfig"></property>
</bean>
<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalC onfig.DbConfig">
</bean>
</beans>

1、当添加上述配置之后,大家发现运行过程中报错,
Property ‘configuration’ and ‘configLocation’ can not specified with
together
表示这两个标签无法同时使用,因此我们可以选择将configLocation给
禁用掉,就是不使用mybatis的配置,此时就能够正常使用了,但是放置属性的 时候又报错了,原因就在于我们把驼峰标识给禁用了,重新开启即可。除此之 外,我们还可以在属性的上面添加@TableField属性

 @TableField(value = "e_name")
 private String eName;

2、此时发现日志功能又无法使用了,只需要添加如下配置即可

<bean    id="configuration"   class="com.baomidou.mybatisplus.core.MybatisConfiguration">
     <property   name="mapUnderscoreToCamelCase"   value="true"></property>
     <property    name="logImpl"   value="org.apache.ibatis.logging.log4j.Log4jImpl"></property>
</bean>

3、我们在刚刚插入数据的时候发现每个类可能都需要写主键生成策略,这是比 较麻烦的,因此可以选择将主键配置策略设置到全局配置中。

<bean id="dbConfig" class="com.baomidou.mybatisplus.core.config.GlobalCon fig.DbConfig">
<property name="idType" ref="idType"></property>
</bean>
<util:constant id="idType" static‐field="com.baomidou.mybatisplus.annota tion.IdType.AUTO"></util:constant>

4、如果你的表的名字都具备相同的前缀,那么可以设置默认的前缀配置策略,
此时的话可以将实体类上的@TableName标签省略不写
在这里插入图片描述

5、在mybatis­plus中如果需要获取插入的数据的主键的值,那么直接获取即
可,原因就在于配置文件中指定了默认的属性为true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值