依赖
注意
这里使用数据库连接池,使用的是Druid,这里是Druid是使用的是com.alibaba.druid-spring-boot-starter
,该starter是由第三方提供的,MyBatis和Druid依赖的命名和其他库的命名不太一样,但是它所支持的mysql是mysql8,这由于数据库版本的问题,所以我们需要锁定数据库版本。
这里我们所需要的依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.28</version>
<scope>runtime</scope>
</dependency>
application.properties
spring.datasource.one.url=jdbc:mysql:///db?useUnicode=true&characterEncoding=utf-8
spring.datasource.one.type=com.alibaba.druid.pool.DruidDataSource
spring.datasource.one.username=root
spring.datasource.one.password=rootzsl
Mapper的接口
public interface EmpMapper {
List<User> getAllEmp ();
Integer addUser(Emp emp);
Integer updateEmpById(Emp emp);
Integer deleteEmpById(Integer id);
}
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.zsl.mybatis02.mapper1.IMapperOne">
<select id="getAllEmp" resultType="com.zsl.mybatis02.pojo.Emp">
select * from emp;
</select>
<insert id="addEmp" parameterType="com.zsl.mybatis02.pojo.Emp">
insert into emp (username,address) values (#{username},#{address});
</insert>
<update id="updateEmpById" parameterType="com.zsl.mybatis02.pojo.Emp">
update user set emp=#{username},address=#{address} where id=#{id}
</update>
<delete id="deleteEmpById">
delete from emp where id=#{id}
</delete>
</mapper>
关于这个Mapper.xml的位置
这里介绍两种:
1.xml配置文件和接口在一个包下面。
2.xml配置文件在resources目录下面的mapper目录下
xml配置文件和接口在一个包下面就容器能扫描到,但是打包的时候会被忽略,不能直接被打包。
解决方案:
在pom.xml文件中再添加如下配置,避免打包时java目录下的XML文件被自动忽略掉.
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
</resource>
</resources>
</build>
xml配置文件在resources目录下面的mapper目录下,打包不会被忽略,但是容器自动扫描不到,需要我们在配置文件里进行配置
mybatis.mapper-locations=classpath:mapper/*.xml
其实,还有一种不常用的方式,可以不使用xml配置文件,使用注解的方式来写sql。
直接在mapper接口上加上注解和对应的sql语句
@Repository
public interface IMapperOne {
List<Emp> getAllEmp();
@Select("select * from emp")
List<Emp> getAllEmp();
@Results({
@Result(property = "id", column = "id"),
@Result(property = "ename", column = "e"),
@Result(property = "address", column = "a")
})
@Select("select ename as e,address as a,id as id from emp where id=#{id}")
Emp getEmpById(Long id);
@Select("select * from emp where ename like concat('%',#{name},'%')")
List<User> getEmpByName(String name);
@Insert({"insert into emp(ename,address) values(#{ename},#{address})"})
@SelectKey(statement = "select last_insert_id()", keyProperty = "id", before = false, resultType = Integer.class)
Integer addEmp(Emp emp);
@Update("update emp set ename=#{ename},address=#{address} where id=#{id}")
Integer updateEmpById(Emp emp);
@Delete("delete from emp where id=#{id}")
Integer deleteEmpById(Integer id);
}
通过全注解的方式来写SQL,不写XML文件,这里的注解@Select、@Insert、@Update以及@Delete四个注解分别对应XML中的select、insert、update以及delete标签。
而@Results对应着xml中的ResultMap映射文件。
值得一提的是@SelectKey注解可以实现主键回填的功能,就是在你新增一比数据时,新增成功后,获得该数据的主键。
使用全注解的方式来写SQL,不写XML文件的方式,需要指定mapper扫描路径,两种方式:
1.在每个mapper接口上添加扫描注解@Mapper
2.只需在启动类上配置mapper扫描注解,指定它要扫描哪个包下的
@SpringBootApplication
@MapperScan(basePackages = "com.zsl.mybatis02.mapper1")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}