SpringBoot整合mybatis并且实现单表curd操作
在idea中整合mybatis,主要是步骤细节
具体步骤
1.首先是需要关键的依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2.只有这和依赖才可以整合成功。
然后是配置文件:
server:
port: 8080 #设置端口号
spring:
datasource:
username: root
password: root
url: jdbc:mysql://127.0.0.1:3306/jtadmin?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
driver-class-name: com.mysql.jdbc.Driver
mybatis:
mapper-locations: classpath:/mybatis/mappers/.xml#这里是如果路径对应的话,
就可以不用配置,但是如果不对应的话就需要配置,classpath:相对路径,对应的文件映射
type-aliases-package: com.jt.pojo #实体类文件路径
#开启驼峰映射
configuration:
map-underscore-to-camel-case: true
3.然后在 启动类上加注解:
@MapperScan(“com.jt.mapper”)
这里主要是接口路径
4.实体类:
这里用到了lombok注解;
@Data
@Accessors(chain = true)
public class DemoUser {
private Integer id;
private String name;
private Integer age;
private String sex;
}
5.然后在接口中写方法即可:
@Repository
public interface DemoUserMapper {
//测试整合mybatis
List<DemoUser> findAll();
}
6.这里同时在映射文件里写入相对应的:
<?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.DemoUserMapper"><!--这里路径必须写对应接口类-->
<insert id="insertUser">
insert into demo_user(id,name,age,sex)
values(null,#{name},#{age},#{sex})
</insert>
<!--配置实体类与数据库字段不对应问题-->
<select id="findAll" resultMap="DemoUser">
select * from demo_user
</select>
<!--需要执行的sql语句-->
</mapper>
然后测试即可!
附测试:
DemoUser:
@Data
@Accessors(chain = true)
public class DemoUser {
private Integer id;
private String name;
private Integer age;
private String sex;
}
SpringBootRun:
@SpringBootApplication //标识主启动类的注解
@MapperScan("com.jt.mapper") //将Mapper接口交给容器管理
public class SpringBootRun {
public static void main(String[] args) {
SpringApplication.run(SpringBootRun.class,args);
}
}
DemoUserMapper:
import java.util.List;
public interface DemoUserMapper {
List<DemoUser> findAll();
void insertUser(DemoUser user);
void updateUser(String oldName, String nowName, String sex);
}
Test:
@SpringBootTest
public class TestSpringBoot {
@Autowired
private DemoUserMapper userMapper;
//数据的查询
@Test
public void testFindAll(){
//代理的测试 jdk动态代理
System.out.println(userMapper.getClass());
System.out.println(userMapper.findAll());
}
//新增用户
@Test
public void testInsert(){
DemoUser user = new DemoUser();
user.setId(null).setName("mybatis信息").setAge(18).setSex("男");
userMapper.insertUser(user);
}
//将mybatis name="mybatis信息" 改为"测试信息".要求sex="男"
//update demo_user set name="测试信息"
// where name="mybatis信息" and sex="xx"
//更新操作
@Test
public void testUpdate(){
//1.封装数据
String oldName = "mybatis信息";
String nowname = "测试信息";
String sex = "男";
userMapper.updateUser(oldName,nowname,sex);
}
}
UserMapper:
<?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">
<!--namespace
1.Mapper.xml配置文件的唯一标识
2.需要与Mapper接口保持一致.
UserMapper.findAll(); 通过方法映射Sql语句!!!
-->
<mapper namespace="com.jt.mapper.DemoUserMapper">
<!--编辑更新操作 #mybatis中的一种表达式写法 -->
<update id="updateUser">
update demo_user set name=#{nowName} where name=#{oldName}
and sex=#{sex}
</update>
<!--
完成用户入库操作 id="与方法名称保持一致"
sql结束时不需要添加;号 在Mysql数据库中执行;号没有问题,
但是如果在Oracle中执行则必然报错.
-->
<insert id="insertUser">
insert into demo_user(id,name,age,sex)
value(null,#{name},#{age},#{sex})
</insert>
<!--查询标签必须有返回值
resultType :直接返回POJO对象的数据 单表查询
resultMap: 适用于关联查询的结果封装 一般采用第三方对象接收
问题:能否将不变的包路径进行优化???
解决方案: 定义别名包即可
说明:
resultType="包名.类名" resultType="com.jt.pojo.DemoUser"
定义别名包
type-aliases-package: com.jt.pojo
resultType="DemoUser" 可以直接返回对象的名称
程序解析时: 首先根据别名包的名称进路径的拼接 com.jt.pojo.DemoUser
-->
<select id="findAll" resultType="DemoUser">
select * from demo_user
</select>
<!--更新操作的标签就是为了方便程序员开发时使用,程序
执行时没有任何的差别,所以可以混用
<insert id="">
</insert>-->
</mapper>