项目实战使用的技术是spring boot ,mybatis,druid
mybatis采用注解的方式,没有采用xml的方式,省去配置的内容。
项目使用maven管理依赖包,数据库使用mysql5.7
-
引入依赖:
<!--mybatis的包--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!--druid数据库连接池的包--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.10</version> </dependency> <!--mysql数据库驱动的包--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.6</version> </dependency>
-
项目配置文件 #DB数据源配置 spring.datasource.druid.initial-size=1 spring.datasource.druid.min-idle=3 spring.datasource.druid.max-active=20 #配置获取连接等待超时的时间 spring.datasource.druid.max-wait=60000 #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 spring.datasource.druid.time-between-eviction-runs-millis=60000 #配置一个连接在池中最小生存的时间,单位是毫秒 spring.datasource.druid.min-evictable-idle-time-millis=300000 spring.datasource.druid.stat-view-servlet.login-username=admin spring.datasource.druid.stat-view-servlet.login-password=admin spring.datasource.druid.one.type=com.alibaba.druid.pool.DruidDataSource spring.datasource.druid.one.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.druid.one.url=jdbc:mysql://mysql:3306/seasfood?characterEncoding=utf8&useSSL=true&serverTimezone=PRC&nullNamePatternMatchesAll=true spring.datasource.druid.one.username=root spring.datasource.druid.one.password=123456 需要配置数据库的地址和密码,这个例子仅对druid做了简单的配置,更多优化配置到druid官网查看
-
项目数据源配置,这里没有读写分离的数据源配置,编写一个spring配置类:
@Configuration("DaoConfiguration") @EnableTransactionManagement public class DaoConfiguration { @Primary @Bean @ConfigurationProperties("spring.datasource.druid.one") public DataSource dataSourceOne() { return DruidDataSourceBuilder.create().build(); } @Bean public DataSourceTransactionManager dataSourceTransactionManager() { return new DataSourceTransactionManager(dataSourceOne()); } }
-
编写一个mapper接口,必须在spring能够扫描到的包下
@Mapper public interface GoodsMapper { @Select("SELECT * FROM goods") List<GoodsEntity> selectGoods(@Param("now") Date date); }
-
在service组件中注入mapper接口即可使用
@Autowired private GoodsMapper mapper; mapper.selectGoods();
-
mybatis的高级用法: 1: 动态sql语句,通过增加<script></script>来让sql语句可以根据条件增加WHERE,AND,OR,IN等内容 2:结果集缓存:一般不用,都是在service层做cache处理 3:类型处理器TypeHandler:用于把一些特殊的列的值转换成特殊的字段,例如把逗号或者其他分隔符分隔的值转换成List 4:拦截器:用来做一些特殊的处理,例如分页
删除记录: @Delete("DELETE FROM mytable WHERE id=#{}") 更新记录: @Update("UPDATE mytable SET myname=#{myname}") 插入记录: @Insert("INSERT INTO mytable (myfield1,myfield2) VALUES (#{var1},#{var2})
-
使用@SelectKey获取自增主键的值: @SelectKey(statement = "select max(addr_id)+1 as id from user_address", before = true, keyColumn = "id", resultType = String.class, keyProperty = "addr_id")
使用注解时,Mapper中的queryId: 使用注解的方法名作为queryId,如果方法名相同的,其中一个会以方法名作为queryId,而其他的则会以类全名加方法名作为queryId