spring-boot之(11) mybatis

  前面说了jdbcTemplate和dataSource后,接下来的目标就是集成Mybatis,Spring-boot也提供了Spring-data的集成。

  • 项目结构

   MyProject

   |——src

      |——main

         |——java

             |——com.xxxx

             |——config     配置相关

             |——domain   持久层

             |——mapper   dao层

             |——service  service层

             |——web        web层

         |——resources

             |——mapper

                  |——com.xxx.bean

             |——static

             |——templates

             |——application.yml

  • Mybatis的Mapper配置文件
<?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.fzhsh.demo.boot.mapper.UserMapper" >
    <resultMap id="BaseResultMap" type="com.fzhsh.demo.boot.domain.User" >
        <id column="id" property="id" jdbcType="VARCHAR" />
        <result column="name" property="username" jdbcType="VARCHAR" />
        <result column="password" property="password" jdbcType="VARCHAR" />
    </resultMap>

    <sql id="Base_Column_list">
        id, `username`, `password`
    </sql>
    
    <insert id="insert" parameterType="com.fzhsh.demo.boot.domain.User">
        INSERT INTO fd_common_user  (<include refid="Base_Column_list" />)
        VALUES (#{id, jdbcType=VARCHAR}, #{username,jdbcType=VARCHAR}, #{password, jdbcType=VARCHAR})
    </insert>
    


    <select id="selectById" parameterType="int" resultMap="BaseResultMap">
        SELECT <include refid="Base_Column_list"/>
        FROM fd_common_user
        WHERE id=#{id,jdbcType=VARCHAR}
    </select>


</mapper>
  • java实体对象
public class User implements UserDetails {

    private String id;

    private String username;

    private String password;

    public User(){}

    public User(String username, String password){
        this.username = username;
        this.password = password;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        Set<GrantedAuthority> set = new HashSet<GrantedAuthority>();
        set.add(new SimpleGrantedAuthority("ROLE_LOGIN"));
        return set;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    public void setId(String id) {
        this.id = id;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getId() {
        return id;
    }

}
  • Mapper查询接口
public interface UserMapper {

    User selectById(String id);

    void insert(User user);
}
  • Service代码
@Service
public class CommonUserService {

    @Autowired
    private UserMapper userMapper;

    public User getUser(String id){
        return userMapper.selectById(id);
    }

    public void addUser(String id, String username, String password){
        User user = new User(username, password);
        user.setId(id);
        addUser(user);
    }

    public void addUser(User user){
        userMapper.insert(user);
    }
}
  • 修改之前登陆认证逻辑
@Service
public class SimpleUserDetailService implements UserDetailsService {

//    @Autowired
//    private MyJdbcTemplate myJdbcTemplate;

    @Autowired
    private CommonUserService userService;

    @Override
    public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
//        Map map = myJdbcTemplate.getJdbcTemplate().queryForMap("select * from fd_common_user where `id`='1'");
//        System.out.println(map.get("USERID"));
//        return new User("root", "root");

        return userService.getUser("1");
    }
}
  • 最重要集成Mybatis配置
@Configuration
public class MybatisConfig {

        @Bean
        @ConfigurationProperties(prefix="mime.datasource")
        public DataSource primaryDataSource() {
            return DataSourceBuilder.create()
                    .url("jdbc:mysql://127.0.0.1:3306/food?useUnicode=true&amp;characterEncoding=utf-8&amp;zeroDateTimeBehavior=round&amp;allowMultiQueries=true&amp;autoReconnect=true")
                    .username("root")
                    .password("root")
                    .build();
        }

        @Bean("sqlSessionFactory")
        public SqlSessionFactoryBean mybatis(@Autowired DataSource dataSource) throws IOException {
            SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();

            sessionFactoryBean.setDataSource(dataSource);
            ResourcePatternResolver patternResolver = new PathMatchingResourcePatternResolver();
            sessionFactoryBean.setMapperLocations(patternResolver.getResources("classpath:mapper/com/fzhsh/demo/boot/*.xml"));

            return sessionFactoryBean;
        }

        @Bean
        public MapperScannerConfigurer scannerConfigurer(@Autowired SqlSessionFactory sqlSessionFactory){
            MapperScannerConfigurer scannerConfigurer = new MapperScannerConfigurer();
            scannerConfigurer.setSqlSessionFactory(sqlSessionFactory);
            scannerConfigurer.setBasePackage("com.fzhsh.demo.boot.mapper");
            return scannerConfigurer;
        }
}
  •  至此结束,参考资料

https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-sql

posted @ 2017-05-12 16:21  風之殤  阅读(91)  评论(0)    收藏  举报