使用mybatis框架进行增删改查大致有两种基础方式,一种扩展方式。两种基础方式分别是使用xml映射文件和使用方法注解。扩展方式是使用mybatis-plus的方式,其用法类似于spring-data-jpa。
<!--springboot的web起步依赖--> <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.1.0</version> </dependency> <!-- MySql连接驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency>
@TableName(value = "tb_user")//使用mybatis-plus时需要添加,与数据库中的表建立关系 public class SysUser implements Serializable { @TableId(type = IdType.AUTO)//使用mybatis-plus时需要添加,主键生成策略 private Long id; private String username; private String password; private String salt; private String avatar; private String introduce; private String remark; //省略get,set方法 }
#DB Configuration数据库信息: spring.datasource.driverClassName=com.mysql.jdbc.Driver spring.datasource.url=jdbc:mysql:///test spring.datasource.username=root spring.datasource.password=root spring.datasource.type=com.zaxxer.hikari.HikariDataSource #spring集成Mybatis环境 #pojo别名扫描包 mybatis.type-aliases-package=cn.zhq.system.entity #加载Mybatis映射文件 mybatis.mapper-locations=classpath:mapper/*Mapper.xml # 打印sql #打印sql到控制台 logging.level.cn.zhq.system.mapper=debug
mybatis.type-aliases-package是实体所在包的位置,mybatis.mapper-locations是配置文件所在的位置。初次使用的时候最好加上打印sql的配置,如果出现错误的话,这样容易找出错误原因。
@Mapper public interface UserMapper { }
@EntityScan("cn.zhq.system.entity")//填写 entity类所在包的位置。
加上这个注解后,springboot就可以扫描能实体类。
/** * 根据Name查询用户数据 * * @param username * @return */ SysUser findByName(String username);
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="cn.zhq.system.mapper.UserMapper"> <select id="findByName" resultType="sysuser" parameterType="String"> select * from tb_user where username = #{username} </select> </mapper>
使用select标签执行查询语句,使用update标签进行 增,删,改操作。其中 id是UserMapper类中方法的名称,resultType是返回值的类型,parameterType是接收的参数类型。
/** * 更新用户名 * @param username */ @Update("update tb_user set username= #{username} where id = #{id}") void updateByAvatar(String username,Long id);
使用@Update注解后,就无需再编写UserMapper配置文件了,同理@Updae可以进行增删改操作。此外使用@Select进行查询。当进行一对多,多对多关系的查询时,还可以使用@Results注解指定返回结果的数据类型,这里就不细说了。
以上两种方式各有利弊,使用配置文件编写sql语句好处是耦合度低但过于麻烦,使用注解的方式相对于配置文件来说比较简单,但是耦合度高。如果是简单语句,建议是使用注解,如果是复杂语句,使用配置文件的方式。具体使用哪种方式,可以视实际情况而定。
mybatis-plus类似于spring data jpa , 内置查询,更新,删除,插入语句,使我们无需再写那些简单的sql语句。
<!-- Mybatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency>
# mybatis-plus mybatis-plus: type-aliases-package: cn.zhq.system.entity mapper-locations: classpath:mapper/*.xml configuration: jdbc-type-for-null: null global-config: banner: false
type-aliases-package填写Entity实体类所在包的位置。mapper-locations:填写映射文件所在的位置,如果不写的话,在你的resources下的mapper配置文件会报错。
service:
public interface UserService extends IService<SysUser> { /** * 更新 * * @param sysUser */ void update(SysUser sysUser); }
serviceImpl:
@Service public class UserServiceImpl extends ServiceImpl<UserMapper, SysUser> implements UserService { @Autowired private UserMapper userMapper; @Override @Transactional public void update(SysUser sysUser) { userMapper.updateById(sysUser); } }
mapper:
@Mapper public interface UserMapper extends BaseMapper<SysUser> { }
虽然我们在UserMapper中没有定义任何方法,但是mybatisPlus集成了很多方法可供我们使用。
执行后,打印的sql语句结果如下