SpringBoot整合Mybatis
1.导入依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--引入mybatis-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<!--引入druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<!--热部署依赖 devtools-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<!--optiional:该依赖是否可以传递 true 不能传递-->
<!--热部署
1.导入 依赖
2.开启自动配置
build ==> automotic
Registry ctrl+alt+shift+/
-->
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.书写配置(数据库、mapper.xml)
server:
port: 8089
servlet:
context-path: /springbootmybatis
#整合mybatis相关配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver #mysql5.x驱动版本
url: jdbc:mysql://120.77.216.183:3306/bootssm?characterEncoding=UTF-8
username: root
password: root123
mybatis:
mapper-locations: classpath:com/example/mapper/*.xml #指定mapper配置文件位置
type-aliases-package: com.example.entity
#配置日志
logging:
level:
root: info #全局日志为debug
com.example.dao: debug #指定包的日志级别
file:
name: run.log #指定生成日志文件名称
path: ./ #将日志文件生成到当前目录中
3.写接口,写接口Mapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserDao">
<!--查询所有-->
<select id="findAll" resultType="user">
select id,name,birthday,salary from user
</select>
<!--添加用户 -->
<insert id="save" parameterType="user" useGeneratedKeys="true" keyProperty="id">
insert into user values(#{id},#{name},#{birthday},#{salary})
</insert>
</mapper>
注:@MapperScan(“com.example.mapper”)//修饰范围: 用在类上作用:用来扫描dao接口所在包同时将所有dao接口在工厂中创建对象
Mybatisplus常用注解
/*
SpringBoot整合Mybatis-plus
1.导入依赖
<!--mybatisplus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<!--引入druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.19</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
2.写实体类、mapper 、service
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
@EqualsAndHashCode(callSuper = false)
public class User extends Model<User> {
@TableId
//主键
private Long id;
//姓名
private String name;
@TableField(exist = false)
// transient 不参与序列化
//真实姓名
private String realName;
//年龄
private Integer age;
//邮箱
private String email;
//直属上级
private Long managerId;
//创建时间
private LocalDateTime createTime;
}
/*
SSM传统编程模式
接口中写抽象方法
XML或注解写SQL
Service中调用接口
Controller中调用
AR模式
通用Mapper
*/
mapper接口
public interface UserMapper extends BaseMapper<User> {
// 自定义Sql
@Select("select * from user ${ew.customSqlSegment}")
List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER)Wrapper<User> wrapper);
}
service
public interface UserService extends IService<User> {
}
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
List<User> selectAll(Wrapper<User> wrapper){
return this.baseMapper.selectAll(wrapper);
}
}
3、配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.UserMapper">
<select id="selectAll" resultType="com.example.entity.User">
select * from user ${ew.customSqlSegment}
</select>
</mapper>
application.propertis中注明
mybatis-plus.mapper-locations=
mybatis-plus.type-aliases-package=
1.常用注解
@TableName(“user”)
@TableId 设置主键映射,value映射主键字段名,type设置主键类型,主键的生成策略
AUTO(0)数据库自增 NONE(1)Mapset主键,雪花算法实现
INPUT (2)需要开发者手动赋值 否则默认自增
ASSIGN_ID(3)MP分配ID ASSIGN_UUID(4)分配UUID 要求主键为String类型
2.TableFiled(value="")映射非主键字段,value映射字段名
TableField(exist = false);
3.exist 表示是否数据库字段false,如果实体类中成员变量在数据库中没有对应的字段
select = false;表示是否查询该字段
fill 表示是否自动填充,将对象存入数据库中的时候,由mybatisplus 自动给某些字段赋值 create
mybatis-plus文档
https://www.javadoc.io/static/com.baomidou/mybatis-plus/1.3.10/overview-summary.html
Mapper层可继承的底层接口
服务层可以继承的底层接口
注意:
可以通过导入xml文件整合
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/spring-context.xml");
SpringContextUtil springContextUtil = new SpringContextUtil();
springContextUtil.setApplicationContext(context);
context.start();
获取springboot中IOC容器
@Component
public class SpringContextUtil implements ApplicationContextAware {
private static ApplicationContext applicationContext; // Spring应用上下文环境
/*
* 实现了ApplicationContextAware 接口,必须实现该方法;
*通过传递applicationContext参数初始化成员变量applicationContext
*/
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
@SuppressWarnings("unchecked")
public static <T> T getBean(String name) throws BeansException {
return (T) applicationContext.getBean(name);
}
}
开发应用
public interface CouponActivityMapper extends AutoMapper<CouponActivity, String> {
/**
* 查询指定时间范围内的活动
*
* @param map 时间商户编码
* @return CouponActivity
*/
CouponActivity getCouponActivityByDate(Map<String, String> map);
/**
* 查询优惠券活动总数
*/
Integer getActivityCounts(@Param("qm") CouponActivityVo qm);
/**
* 分页查询优惠券活动列表
*/
List<CouponActivity> queryList(@Param("qm") CouponActivityVo qm, @Param("offset") int offset, @Param("limit") int limit);
}
public interface ICouponActivityService extends ISuperService<CouponActivity, String>{}
public class CouponActivityServiceImpl extends SuperServiceImpl<CouponActivityMapper, CouponActivity, String>
implements ICouponActivityService {
private List<CouponActivity> getActivityListByTimeRange(String storeUuid, String activityType, String beginTime, String endTime,
String needExpired, List<String> notInUuids) {
CouponActivityVo qm = new CouponActivityVo();
qm.setStoreUuid(storeUuid);
qm.setActivityType(activityType);
qm.setNeedExpired(needExpired);
qm.setBeginTime(beginTime);
qm.setEndTime(endTime);
qm.setNotInUuids(notInUuids);
return this.baseMapper.queryList(qm, 0, 0);
}}