111
Springboot学习笔记
配置
springBoot整合mybatis
1.依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
2.application.yaml
#配置数据源信息
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource #数据源类型
driver-class-name: com.mysql.cj.jdbc.Driver #驱动名称
url: jdbc:mysql://localhost:3306/mysql02?serverTimezone=UTC&&useSSL=false #URL链接
username: root
password: 585858
mvc: #配置jsp映射路径 return "index" /index.jsp
view:
prefix: /
suffix: .jsp
interceptors:
mapping:
path: "/**"
handler:
bean: "loginInter"
mybatis:
type-aliases-package: com.galls.springbootandmybatis.pojo #配置mybatis别名映射
mapper-locations: classpath:/mapper/*Mapper.xml #配置mapper映射文件路径
logging: #指定mapper 包的日志级别 可以方便的看到sql 语句的输出
level:
com.galls.springbootandmybatis.mapper: debug
springboot分页
1.
2
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<!-- mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.1</version>
</dependency>
<!-- mybatis-plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<!-- 模板 代码生成需要使用模板进行生成-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<!-- mybatis-plus 扩展插件 比如 分页插件依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
<version>3.4.2</version>
</dependency>
mybatis-plus方法注释
/**
* Mapper 继承该接口后,无需编写 mapper.xml 文件,即可获得CRUD功能
* 这个 Mapper 支持 id 泛型*/
public interface BaseMapper<T> {
/**
* 插入一条记录
* @param entity
* 实体对象
* @return int
*/
Integer insert(T entity);
/**
* 根据 ID 删除
* @param id
* 主键ID
* @return int
*/
Integer deleteById(Serializable id);
/**
* 根据 columnMap 条件,删除记录
* @param columnMap
* 表字段 map 对象
* @return int
*/
Integer deleteByMap(@Param("cm") Map<String, Object> columnMap);
/**
* 根据 entity 条件,删除记录
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return int
*/
Integer delete(@Param("ew") Wrapper<T> wrapper);
/**
* 删除(根据ID 批量删除)
* @param idList
* 主键ID列表
* @return int
*/
Integer deleteBatchIds(List<? extends Serializable> idList);
/**
* 根据 ID 修改
* @param entity
* 实体对象
* @return int
*/
Integer updateById(T entity);
/**
* 根据 whereEntity 条件,更新记录
* @param entity
* 实体对象
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return
*/
Integer update(@Param("et") T entity, @Param("ew") Wrapper<T> wrapper);
/**
* 根据 ID 查询
* @param id
* 主键ID
* @return T
*/
T selectById(Serializable id);
/**
* 查询(根据ID 批量查询)
* @param idList
* 主键ID列表
* @return List<T>
*/
List<T> selectBatchIds(List<? extends Serializable> idList);
/**
* 查询(根据 columnMap 条件)
* @param columnMap
* 表字段 map 对象
* @return List<T>
*/
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
/**
* 根据 entity 条件,查询一条记录
* @param entity
* 实体对象
* @return T
*/
T selectOne(@Param("ew") T entity);
/**
* 根据 Wrapper 条件,查询总记录数
* @param wrapper
* 实体对象
* @return int
*/
Integer selectCount(@Param("ew") Wrapper<T> wrapper);
/**
* 根据 entity 条件,查询全部记录
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return List<T>
*/
List<T> selectList(@Param("ew") Wrapper<T> wrapper);
/**
* 根据 Wrapper 条件,查询全部记录
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return List<T>
*/
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> wrapper);
/**
* 根据 Wrapper 条件,查询全部记录
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return List<Object>
*/
List<Object> selectObjs(@Param("ew") Wrapper<T> wrapper);
/**
* 用法:(new RowBounds(offset, limit), ew);
* 根据 entity 条件,查询全部记录(并翻页)
* @param rowBounds
* 分页查询条件(可以为 RowBounds.DEFAULT)
* @param wrapper
* 实体对象封装操作类(可以为 null)
* @return List<T>
*/
List<T> selectPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);
/** -- 不常用,
* 根据 Wrapper 条件,查询全部记录(并翻页)
* @param rowBounds
* 分页查询条件(可以为 RowBounds.DEFAULT)
* @param wrapper
* 实体对象封装操作类
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> selectMapsPage(RowBounds rowBounds, @Param("ew") Wrapper<T> wrapper);
}
修改操作
自动填充
import java.util.Date;
//实现元对象处理器接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//添加的时候 填充
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
//修改的时候 填充
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
测试类
@SpringBootTest
class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectList(){
List<User> users = userMapper.selectList(null);
System.out.println("users = " + users);
}
@Test
public void insert(){
User user = new User();
user.setUsername("zhangsan");
user.setPassword("123456");
int insert = userMapper.insert(user);
System.out.println(insert);
System.out.println("user"+ user);
}
@Test
public void update(){
User user = new User();
user.setId(62);
user.setUsername("zhangsan");
userMapper.updateById(user);
}
}
乐观锁
简单的查询(根据主键)
根据主键多个id查询,sql语句用in
简单查询用map(条件查询根据某一个条件或多个条件查询)
@Test
public void testSelectByMap(){
HashMap<String, Object> map = new HashMap<>();
map.put("username","root");
List<User> users = userMapper.selectByMap(map);
users.forEach(System.out::println);
}
查询结果
User{id=47, username='root', password='111', phone='15896734124', createTime=Sun Oct 22 00:00:00 CST 2023, money=22.0, sex=1, updateTime=null}
User{id=48, username='root', password='11', phone='15896734124', createTime=Mon Oct 30 00:00:00 CST 2023, money=1.1111111E7, sex=1, updateTime=null}
User{id=49, username='root', password='111', phone='15896734124', createTime=Sun Oct 22 00:00:00 CST 2023, money=22.0, sex=1, updateTime=null}
User{id=53, username='root', password='11', phone='15896734124', createTime=Thu Oct 26 00:00:00 CST 2023, money=1.1111111E7, sex=1, updateTime=null}
User{id=55, username='root', password='11', phone='15896734124', createTime=Sun Oct 29 00:00:00 CST 2023, money=22.0, sex=1, updateTime=null}
User{id=58, username='root', password='11', phone='15896734124', createTime=Sun Oct 29 00:00:00 CST 2023, money=22.0, sex=1, updateTime=null}
User{id=60, username='root', password='1', phone='15896734124', createTime=Mon Oct 23 00:00:00 CST 2023, money=111.0, sex=2, updateTime=null}
package com.example.mybatisplus2.handler;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@EnableTransactionManagement
@Configuration
//@MapperScan("com.example.mybatisplus2.mapper") mapper 的扫描 写在一个的放就行
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor optimistcLockerIntercepor(){
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
interceptor.addInnerInterceptor(paginationInnerInterceptor);//添加分页拦截器--分页插件
OptimisticLockerInnerInterceptor optimisticLockerInnerInterceptor = new OptimisticLockerInnerInterceptor();
interceptor.addInnerInterceptor(optimisticLockerInnerInterceptor);//添加乐观锁拦截去--乐观锁插件
return interceptor;
}
}
@Test
public void testSelectPage(){
//MyBatis Puls自带分页插件,只要简单的配置即可实现
Page<User> page = new Page<>(1, 5);
//模糊查询
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("username","t");//名字中有含t的个数
Page<User> userPage = userMapper.selectPage(page, queryWrapper);
userPage.getRecords().forEach(System.out::println);
System.out.println(page.getCurrent());
System.out.println(page.getPages());//总页
System.out.println(page.getSize());
System.out.println(page.getTotal());//总记录数
System.out.println(page.hasNext());//是否有下一页
System.out.println(page.hasPrevious());//是否有上一页
}
删除
逻辑删除
abstractWrapper