垣曲网站建设,网站后台怎样推荐图片,代理商门户网站开发,代理网址需要用户名和密码前面都是用的是spring data JPA#xff0c;现在学习下Mybatis#xff0c;而且现在Mybatis也像JPA那样支持注解形式了#xff0c;也非常方便#xff0c;学习一下。
数据库 mysql 5.7
添加依赖
在pom文件中添加#xff1a;
mybatis.version1.3.1/mybatis.ve…前面都是用的是spring data JPA现在学习下Mybatis而且现在Mybatis也像JPA那样支持注解形式了也非常方便学习一下。
数据库 mysql 5.7
添加依赖
在pom文件中添加
mybatis.version1.3.1/mybatis.version
druid.version1.1.3/druid.versiondependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion${mybatis.version}/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactId/dependencydependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion${druid.version}/version/dependency由于springboot 默认使用的 tomcat-jdbc数据源为了方便我添加了阿里巴巴的数据源。
首先了解下mybatis-spring-boot-starter 会做哪些事情 * 自动检测现有的DataSource * 将创建并注册SqlSessionFactory的实例该实例使用SqlSessionFactoryBean将该DataSource作为输入进行传递 * 将创建并注册从SqlSessionFactory中获取的SqlSessionTemplate的实例。 * 自动扫描您的mappers将它们链接到SqlSessionTemplate并将其注册到Spring上下文以便将它们注入到您的bean中。
只要使用这个springboot mybatis starter 只需要DataSource的配置就可以使用了它会自动创建使用该DataSource的SqlSessionFactoryBean以及SqlSessionTemplate。会自动扫描你的Mappers连接到SqlSessionTemplate并注册到Spring上下文中。
配置数据源
在resources/applicaiton.yml文件中添加一些数据源的连接参数配置可选
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriverClassName: com.mysql.jdbc.Driverdruid:url: jdbc:mysql://localhost:3306/learnboot?allowMultiQueriestrueuseUnicodetruecharacterEncodingUTF-8username: rootpassword: 123456initial-size: 10max-active: 100min-idle: 10max-wait: 60000pool-prepared-statements: truemax-pool-prepared-statement-per-connection-size: 20time-between-eviction-runs-millis: 60000min-evictable-idle-time-millis: 300000validation-query: SELECT 1test-while-idle: truetest-on-borrow: falsetest-on-return: falsestat-view-servlet:enabled: trueurl-pattern: /druid/*filter:stat:log-slow-sql: trueslow-sql-millis: 1000merge-sql: truewall:config:multi-statement-allow: truespringboot会自动加载spring.datasource.*相关配置数据源就会自动注入到sqlSessionFactory中sqlSessionFactory会自动注入到Mapper中
使用Mybatis
首先我有一个SysUser
public class SysUserEntity implements Serializable {private static final long serialVersionUID 1L;//主键private Long id;//用户名NotBlank(message 用户名不能为空, groups {AddGroup.class, UpdateGroup.class})private String username;//密码private String password;使用XMl形式
我们来创建User的映射SysUserDao也可以命名Mapper作为尾缀这里我们写个新增一条数据的接口需要注意的是每个Mapper类上要加上Mapper注解
Mapper
public interface SysUserDao {void save(SysUserEntity user);/*** 根据条件查询User* param user User* return 符合条件列表*/ListSysUserEntity query(SysUserEntity user);
}使用xml的时候需要注意的是Mybatis扫描mapper.xml并且装配需要在系统的配置文件resources/applicaiton.yml加入
# Mybatis配置
mybatis:mapperLocations: classpath:mapper/**/*.xmlconfiguration:map-underscore-to-camel-case: true
根据自己的xml目录进行配置。 例如我在resources/mapper/sys目录下面加入SysUserDao.xml文件添加我们查询的SQL
?xml version1.0 encodingUTF-8?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtdmapper namespacecom.wuwii.module.sys.dao.SysUserDao!-- 可根据自己的需求是否要使用 --resultMap typecom.wuwii.module.sys.entity.SysUserEntity idsysUserMapresult propertyid columnid/result propertyusername columnusername/result propertypassword columnpassword//resultMapinsert idsave parameterTypecom.wuwii.module.sys.entity.SysUserEntity useGeneratedKeystruekeyPropertyidINSERT INTO sys_user(username,password)VALUES(#{username},#{password})/insertselect idquery resultTypecom.wuwii.module.sys.entity.SysUserEntitySELECT *FROM sys_userwhereif testusername ! null and username #{username}/ifif testpassword ! nulland password #{password}/if/where/select使用注解形式
这个就要方便很多没有Mapper.xml文件了也不要配置它的文件路径的映射了只要把xml中的SQL 写到注解上就可以了。 直接在SysUserDao中改成
Mapper
public interface SysUserDao {Insert(INSERT INTO sys_user(username,password) VALUES(#{username}, #{password}))void save(SysUserEntity user);Select(SELECT * FROM sys_user WHERE id #{id})Results({Result(property username, column username, javaType String.class),Result(property password, column password)})UserEntity getOne(Long id);
}根据对数据库的操作不同使用不同的注解 * Select 是查询类的注解所有的查询均使用这个 * Result 修饰返回的结果集关联实体类属性和数据库字段一一对应如果实体类属性和数据库属性名保持一致就不需要这个属性来修饰。 * Insert 插入数据库使用直接传入实体类会自动解析属性到对应的值 * Update 负责修改也可以直接传入对象 * Delete 负责删除
注意使用#符号和$符号的不同
// This example creates a prepared statement, something like select * from teacher where name ?;
Select(Select * from teacher where name #{name})
Teacher selectTeachForGivenName(Param(name) String name);// This example creates n inlined statement, something like select * from teacher where name someName;
Select(Select * from teacher where name ${name})
Teacher selectTeachForGivenName(Param(name) String name);单元测试
SpringBootTest
RunWith(SpringJUnit4ClassRunner.class)
public class UserDaoTest {Resourceprivate SysUserDao userDao;TestTransactionalRollback(false)public void testSave() {SysUserEntity user new SysUserEntity();user.setUsername(wuwii);user.setPassword(123);userDao.save(user);Assert.assertEquals(user.getUsername(), userDao.query(user).get(0).getUsername());}
}