04-SpringBoot整合Mybatis

SpringBoot整合Mybatis

1. 添加mybatis依赖包

<!-- parent中规定了SpringBoot中统一的jar包的 依赖项. 1.Spring 2.日志jar包 3.tomcatjar包 版本依赖信息: 
		SpringBoot内部将需要使用的公共jar包的版本号 进行了统一维护 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>

	<!-- 坐标作用: 1.管理项目如何储存 2.项目将来发布时,会将jar包/war包生成到指定的 本地仓库中. 3.生成的jar包可以被第三方项目依赖!!! -->
	<groupId>com.jt</groupId> 				   <!--组ID -->
	<artifactId>springboot-1-demo</artifactId> <!--项目名称 -->
	<version>0.0.1-SNAPSHOT</version>		   <!--版本号 -->
	<name>springboot-1-demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<!--jar包依赖项 1.SSM框架整合时需要编辑很多的配置文件!!! -->
	<dependencies>
		<!-- SpringBoot整合SpringMVC(web.xml)会生成专门的 jar包名称一般都是以spring-boot-starter-xx开头 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<!--添加属性注入依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-configuration-processor</artifactId>
			<optional>true</optional>
		</dependency>

		<!--支持热部署 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>springloaded</artifactId>
			<version>1.2.8.RELEASE</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
		</dependency>

		<!--引入插件lombok 自动的set/get/构造方法插件 -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
		</dependency>
		
		<!--引入数据库驱动 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		
		<!--引入druid数据源  -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.1.12</version>
		</dependency>
		
		<!--spring整合mybatis  暂时  -->
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
	</dependencies>

	<!-- 作用:当项目进行maven操作时,必须引入maven相关插件 -->
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

2. 编辑整合YMl配置文件

server:
  port: 8090
  servlet:
    context-path: /
spring:
  datasource:
#引入druid数据源
#下面两项可不要
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
#只要下面三项是最简化写法
    url: jdbc:mysql://127.0.0.1:3306/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root
    #如果数据库密码以0开头 使用:""包裹

mybatis:
    #定义别名包  简化查询resultType配置
  type-aliases-package: com.jt.pojo
  #Mybatis的映射文件路径
  mapper-locations: classpath:/mybatis/mappers/*.xml
  #开启驼峰映射    字段  属性 对应    去除字段中的"_"之后首字母大写
  configuration:
    map-underscore-to-camel-case: true

3.开启驼峰映射

表名:user
字段:user_id,user_name,user_age,user_sex

对象:User
属性:userId,username,userAge,userSex;

问题说明:
Mybatis中如果实现ORM对象映射,则要求对象中的属性与表中的字段必须一一映射. 但是现在表中的字段与属性名称不一致.中间多”_”.导致映射不成功!!

解决方案:开启驼峰映射规则
	Mybatis:
configuration:
        map-underscore-to-camel-case: true

则可以自动的实现对象的赋值.
驼峰映射原理:

  1. 根据sql语句获取结果集对象.
  2. 利用resultType实现赋值时发现字段与对象的属性不否.
  3. 利用驼峰映射将字段user_id中的”_”去除—userid
  4. 将后边首字母大小------userId
  5. 将数据库中的值自动映射给对象中的属性userId

4. 业务代码实现

4.1 编辑POJO对象

@Data
@Accessors(chain = true)
public class User {
	private Integer id;
	private String name;
	private Integer age;
	private String sex;
}
@Data	//自动添加get/set方法
@Accessors(chain = true) //开启链式加载
@AllArgsConstructor      //添加全部参数的构造
@NoArgsConstructor		 //添加无参构造
public class User {
	private Integer id;
	private String name;
	private Integer age;
	private String sex;
}

4.2 编辑Mapper接口

//将Mapper接口交给Spring容器管理
//@Mapper 将Mapper接口交给Spring容器实例化.接口是不能直接实例化的.
//在底层实现时为mapper接口生成是代理对象. Spring容器内部利用JDK代理方式创建代理对象.
/**
 * JDK代理: 如果被代理者实现了接口/本身是接口时使用JDK代理
 * CGLIB代理: 当被代理者没有实现接口/本身也不是接口时,使用CGLIB代理.
 * 			 特点:代理对象是被代理者的子类.
 * @author tarena
 *
 */
public interface UserMapper {
	
	//查询数据库获取user信息
	@Select("select * from user")
	List<User> findAll();
	
	void insertUser(User user);
}

4.3编辑Mapper映射文件

<?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.jt.mapper.UserMapper">
	
		<!--基于别名包完成自动的映射  -->
		<!--<select id="findAll" resultType="User">
			select * from user
		</select>-->
	

	<!--用户入库操作  -->
	<insert id="insertUser" >
		insert into user(id,name,age,sex)
		values(null,#{name},#{age},#{sex})
	</insert>
	
	<!--以后再映射对象时,只需要编辑类名称即可.
		当需要映射时会根据别名包的定义进行路径的拼接.
	  -->
	<!-- <select id="findAll" resultType="User">
		select * from user
	</select> -->
	<!--自定义映射关系  -->
	<!-- <resultMap type="User" id="userRM">
		主键定义 
		<id column="user_id" property="userId"/>
		<result column="user_name" property="userName"/>
		<result column="user_age" property="userAge"/>
		<result column="user_sex" property="userSex"/>
	</resultMap> -->
	<!--
		表名  user
		字段:
			 user_id
			 user_name
			 user_age
		
		对象  User
		属性:
			 userId
			 userName
			 userAge 
		问题: 数据库中的字段,与对象中的属性名称不一致,
		所以利用resultType无法实现赋值.	
	  -->
</mapper>

4.4 编辑主启动类

//表示定义主启动类
@SpringBootApplication
@MapperScan("com.jt.mapper")	//为mapper接口创建代理对象
public class SpringBootRun {
	
	public static void main(String[] args) {
		
		SpringApplication.run(SpringBootRun.class,args);
	}
}

4.5 编辑测试类

/**
 * SpringBoot测试类写法
 * 1.测试类的包路径必须位于主启动类包路径的子孙包
 * @author tarena
 *
 */
@SpringBootTest	//springBoot容器启动时加载测试类的配制
@RunWith(SpringRunner.class)
public class TestSpringBoot {
	
	@Autowired
	private UserMapper userMapper;
	
	/**
	 * 1.查询user表的记录
	 */
	@Test
	public void testFind() {
		List<User> userList = userMapper.findAll();
		System.out.println(userList);
		System.out.println("获取代理对象的类型:"+userMapper.getClass());
	}
	
	/**
	 * mybatis新增user
	 */
	@Test
	public void insertUser() {
		User user = new User();
		user.setId(null).setName("孙扬")
		.setAge(25).setSex("爷们");
		userMapper.insertUser(user);
		System.out.println("入库成功!!!!");
	}
}

4.6 编辑Service

@Service
public class UserServiceImpl implements UserService {
	//接口实例化: 1.创建实现类 2.创建代理对象 JDK CGLIB
	//原则: 如果代理对象有接口则使用JDK代理
	//		如果代理者没有实现接口 则使用cglib代理		
	@Autowired
	private UserMapper userMapper;

	@Override
	public List<User> findAll() {
		
		return userMapper.findAll();
	}
}

4.7 编辑Controller

@RestController
public class UserController {
	@Autowired
	private UserService userService;
	//用户通过localhost:8090/findAll获取用户数据
	@RequestMapping("/findAll")
	public List<User> findAll(){
		
		return userService.findAll();
	}
}

4.8页面效果

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值