Spring Boot(五):如何优雅的使用Mybatis

16 篇文章 0 订阅
1 篇文章 0 订阅

 简单 xml 模式

     Mapper只需要定义接口,系统会自动根据方法名在映射文件中找对应的 Sql。

     1. 添加相关依赖文件

<dependency>
	<groupId>org.mybatis.spring.boot</groupId>
	<artifactId>mybatis-spring-boot-starter</artifactId>
	<version>2.0.0</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<scope>runtime</scope>
</dependency>

     2. application.properties 添加相关配置

## mybatis配置
mybatis.type-aliases-package=com.aqkc.erp.core.domain
mybatis.mapper-locations=classpath:mapper/*.xml
## 数据库连接池配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/erp?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456

 3. 在启动类中添加对 mapper 包扫描@MapperScan

@MapperScan("com.aqkc.erp.core.dao")
@EnableTransactionManagement
@SpringBootApplication
public class ERPApplication{

	public static void main(String[] args) {
		SpringApplication.run(ERPApplication.class, args);
	}
	
}

      或者直接在 Mapper 类上面添加注解@Mapper,建议使用上面那种,不然每个 mapper 加个注解也挺麻烦的

4. 开发 Mapper

/**
 * Mapper接口
 * @author reyco
 *
 * @param <T>
 */
public interface BaseDao<T> {
	
	/**
	 * 获取一条数据
	 * @param id
	 * @return
	 */
	T get(Integer id);
	/**
	 * 获取多条数据
	 * @param t
	 * @return
	 */
	List<T>	list(T t);
	/**
	 * 新增一条数据
	 * @param obj
	 */
	void save(T t);
	/**
	 * 批量新增
	 * @param list
	 */
	void saveList(List<T> list);
	/**
	 * 修改单条数据
	 * @param obj
	 */
	void update(T t);
	/**
	 * 批量修改
	 * @param list
	 */
	void updateList(List<T> list);

	/**
	 * 删除单体数据
	 * @param obj
	 */
	void remove(Integer id);
	
	/**
	 * 批量删除
	 * @param list
	 */
	void deleteList(List<Integer> list);
	
}

5. 添加 User 的映射文件

<mapper namespace="com.aqkc.erp.core.dao.AccountDao">
	
	<select id="getByUsername" resultType="Account">
		select * from account where username=#{username}
	</select>

	<select id="list" resultType="Account">
		SELECT * from account
	</select>

	<insert id="save">
		insert into `account` values(#{username},#{password})
		<selectKey resultType="int" keyProperty="id" order="AFTER">
			select @@identity
		</selectKey>
	</insert>

	<insert id="saveList" parameterType="java.util.List">
		insert into `account`(`username`,`password`)
		values
		<foreach collection="list" index="index" item="item" separator=",">
			(
				#{item.username},#{item.password}
			)
		</foreach>
	</insert>
	
	<update id="update">
		update `account` set `username`=#{username},`password`=#{password} where id=#{id}
	</update>

	<delete id="delete">
		delete from `account` where `id`=#{id}
	</delete>

	<delete id="deleteList">
		delete from `account`
		where `id` in
		<foreach collection="list" index="index" item="item" open="("
			close=")" separator=",">
			#{item.id}
		</foreach>
	</delete>

</mapper>


无配置文件注解版

1.application.properties 添加相关配置     

 mybatis.type-aliases-package=com.aqkc.erp.core.domain

2. 在启动类中添加对 mapper 包扫描@MapperScan

@MapperScan("com.aqkc.erp.core.dao")
@EnableTransactionManagement
@SpringBootApplication
public class ERPApplication{

	public static void main(String[] args) {
		SpringApplication.run(ERPApplication.class, args);
	}
	
}

3.开发 Mapper

public interface AccountDao {
	
	@Select("SELECT * FROM account")
	List<Account> getAll();
	
	@Select("SELECT * FROM account WHERE id = #{id}")
	AccountgetOne(Long id);

	@Insert("INSERT INTO account(username,password) VALUES(#{username}, #{password})
	void insert(Account account);

	@Update("UPDATE account SET username=#{username},password=#{password} WHERE id =#{id}")
	void update(Account account);

	@Delete("DELETE FROM accountWHERE id =#{id}")
	void delete(Long id);
}

注意,使用#符号和$符号的不同:

SELECT * FROM account WHERE id = #{id}
执行的sql: SELECT * FROM account WHERE id = ?;

SELECT * FROM account WHERE id = ${id}
执行的sql: SELECT * FROM account WHERE id = 1;

     

使用的时候当作普通的类注入进入就可以了          

@Service("accountService")
public class AccountServiceImpl{
	
	@Autowired
	private AccountDao accountDao;
	
	public Account get(Integer id) {
		return accountDao.get(id);
	}
	

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java的艺术

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值