shiro整合mybatis
1.导包
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
</ dependency>
< dependency>
< groupId> org.apache.shiro</ groupId>
< artifactId> shiro-spring</ artifactId>
< version> 1.7.1</ version>
</ dependency>
< dependency>
< groupId> log4j</ groupId>
< artifactId> log4j</ artifactId>
< version> 1.2.17</ version>
</ dependency>
< dependency>
< groupId> com.alibaba</ groupId>
< artifactId> druid</ artifactId>
< version> 1.2.6</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
</ dependency>
< dependency>
< groupId> org.mybatis.spring.boot</ groupId>
< artifactId> mybatis-spring-boot-starter</ artifactId>
< version> 2.2.0</ version>
</ dependency>
2.pojo
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
private int id;
private String name;
private String pwd;
}
3.mapper (dao)层
@Repository
@Mapper
public interface UserMapper {
public User queryUserByName ( String name) ;
}
4.application.yml
spring:
datasource:
#1. JDBC
type: com. alibaba. druid. pool. DruidDataSource
driver- class - name: com. mysql. cj. jdbc. Driver
url: jdbc: mysql: / / localhost: 3306 / mybatis? useUnicode= true & characterEncoding= UTF- 8 & useJDBCCompliantTimezoneShift= true & useLegacyDatetimeCode= false & serverTimezone= UTC
username: root
password: root
druid:
#2. 连接池配置
#初始化连接池的连接数量 大小,最小,最大
initial- size: 5
min- idle: 5
max- active: 20
#配置获取连接等待超时的时间
max- wait: 60000
#配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
time- between- eviction- runs- millis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
min- evictable- idle- time- millis: 30000
validation- query: SELECT 1 FROM DUAL
test- while - idle: true
test- on- borrow: true
test- on- return : false
# 是否缓存preparedStatement,也就是PSCache 官方建议MySQL 下建议关闭 个人建议如果想用SQL防火墙 建议打开
pool- prepared- statements: true
max- pool- prepared- statement- per- connection- size: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall' 用于防火墙
filter:
stat:
merge- sql: true
slow- sql- millis: 5000
#3. 基础监控配置
web- stat- filter:
enabled: true
url- pattern:
5.application.properties
#整合mybaits
mybatis.type-aliases-package=com.tian.pojo
mybatis.mapper-locations=classpath:mapper/*.xml
6.UserMapper.xml
建在resources / mapper / UserMapper.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.tian.mapper.UserMapper" >
< select id = " queryUserByName" parameterType = " String" resultType = " User" >
select * from user where name=#{name}
</ select>
</ mapper>
7.UserService
public interface UserService {
public User queryUserByName ( String name) ;
}
8.UserServiceImpl
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User queryUserByName ( String name) {
return userMapper. queryUserByName ( name) ;
}
}
9.测试
@Autowired
private UserService userService;
@Test
void contextLoads ( ) {
User user = userService. queryUserByName ( "张三" ) ;
System . out. println ( user) ;
}
10.config
public class UserRealm extends AuthorizingRealm {
@Autowired
UserService userService;
@Override
protected AuthorizationInfo doGetAuthorizationInfo ( PrincipalCollection principalCollection) {
System . out. println ( "执行了授权" ) ;
return null ;
}
@Override
protected AuthenticationInfo doGetAuthenticationInfo ( AuthenticationToken token) throws AuthenticationException {
System . out. println ( "执行了认证" ) ;
UsernamePasswordToken userToken = ( UsernamePasswordToken ) token;
User user = userService. queryUserByName ( userToken. getUsername ( ) ) ;
if ( user== null ) {
return null ;
}
return new SimpleAuthenticationInfo ( "" , user. getPwd ( ) , "" ) ;
}
}