Spring框架学习(6)-----集成Mybatis
发布日期:2021-06-29 04:12:12 浏览次数:2 分类:技术文章

本文共 5262 字,大约阅读时间需要 17 分钟。

思维导图:

 

一.引言

    这片文章建立在上篇文章的基础之上。在Spring集成了Spring MVC之后,我们需要利用Spring集成Mybates。这就是这片文章的功能。主要分为两个小节:

  1. Spring如何添加Mybatis配置
  2. 如何简单使用Mytatis

二.Spring集成Mybatis

    在上一篇文章中我们介绍到,DispatherServlet的配置中有两个配置方法,即配置spring的视图解析器,控制器的webConfig的ServletConfig和配置数据库及其他中间件的RootConfig。显而易见,Mybatia就是配置在RootConfig上的。

    我们可以在RootConfig上明确引入一个MybatisConfig的配置类以替代直接在RootConfig上配置Mybatis。如下:

/** * ContextLoaderListner上下文的配置类 * 这个类的作用是配置数据层和中间件 * 比如,这次需要用spring集成mybatis,所以使用@Import注解引入了mybatis的配置类 * * @author : zhouhao * @date : Created in 2019/3/14 7:07 */@Configuration@ComponentScan(excludeFilters={@ComponentScan.Filter(type= FilterType.ANNOTATION, value= EnableWebMvc.class)})@Import(MybatisConfig.class)public class MicroBlogRootConfig {}

    Spirng若想要集成Mybaits则需要配置两个必须的对象。其一是数据源,其二是Session工厂。如下:

/** * Spring 集成 Mybatis的配置类 * 使用@PropertySource从配置文件中获取jdbc的配置属性 * 使用@MapperScan注解可以自动生成dao包下接口的实现类,而不用对每个DAO接口都使用@Mapper注解 * * @author : zhouhao * @date : Created in 2019/3/18 20:06 */@Configuration@PropertySource("classpath:jdbc.properties")@MapperScan(basePackages = "com.zhouhao.springstudy.dao")public class MybatisConfig {    /**     * MYSQL 驱动     */    @Value("${driverClassName}")    public String driverClassName;    /**     * MYSQL的URL,serverTimezone=UTC&useSSL=false参数是由于创建数据源失败加上的     */    @Value("${url}")    public String url;    /**     * 用户名     */    @Value("${user}")    public String username;    /**     * 密码     */    @Value("${password}")    public String password;    /**     * 创建Druid数据源     *     * @return : javax.sql.DataSource     * @author : zhouhao     * @date : 2019/3/20 7:42     */    @Bean    public DataSource dataSource(){        DruidDataSource druidDataSource = new DruidDataSource();        druidDataSource.setDriverClassName(driverClassName);        druidDataSource.setUrl(url);        druidDataSource.setUsername(username);        druidDataSource.setPassword(password);        druidDataSource.setInitialSize(5);        druidDataSource.setMaxActive(10);        //我的测试中,需要加入这个参数,sql不固定.不然会出异常        druidDataSource.setValidationQuery("select 'x' from study.t_study_person;");        return druidDataSource;    }    /**     * 创建Mybates的sessin工厂     * 需要在这里指定mapper的xml文件和java文件的位置     *     * @return : org.mybatis.spring.SqlSessionFactoryBean     * @author : zhouhao     * @date : 2019/3/20 7:44     */    @Bean    public SqlSessionFactoryBean sqlSessionFactoryBean() throws IOException {        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();        //设置数据源        sqlSessionFactoryBean.setDataSource(dataSource());        //设置mapper.xml位置,!!!注意这个编译后的路径,默认情况下不会编译java下的xml文件,所以需要在Maven中设置        ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();        sqlSessionFactoryBean.setMapperLocations(resourcePatternResolver.getResources("classpath:com/zhouhao/springstudy/mapper/*.xml"));        return sqlSessionFactoryBean;    }}

    到此,在Spring中集成Mybatis已经完成了。注意:组件的自动扫描放在了ServletConfig中。

三.使用Mybatis

    在配置好了Mybatis后,想要使用,其实主要是4个点:

  • Table:在数据库中建好需要使用到的表
  • Entity:此数据库表的POJO对象
  • DAO:数据获取对象,这必须是个接口。方法可以对应与与数据库的交互。运行时有Mybatis生成实例对象
  • Mapper:和DAO中的方法一一对应,属于配置文件,在其中写入SQL以控制数据库语句的执行结果

    Table就不在写建表语句了

3.1 Person POJO对象

/** * t_study_person POJO对象 * * @author : zhouhao * @date : Created in 2019/3/18 20:38 */public class Person {    /**     * ID,唯一标识     */    private String id;    /**     * 名称     */    private String name;    /**     * 密码     */    private String password;    public String getId() {        return id;    }    public void setId(String id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPassword() {        return password;    }    public void setPassword(String password) {        this.password = password;    }}

3.2 DAO 数据获取对象

/** * t_study_person 的数据获取对象 * * @author : zhouhao * @date : Created in 2019/3/18 20:39 */public interface PersonMapper {    /**     * 插入一条数据     *      * @param person Ponson对象     */    void insertPerson(Person person);    /**     * 通过name查询出一条person数据     * @param name 名称     * @return Person      */    Person selectByName(String name);}

3.3 Mapper DAO对应的配置文件

insert into t_study_person (ID,NAME,PASSWORD) VALUES (#{id},#{name},#{password})

3.4 使用

    由此,我们就可以像使用spring已配置的对象那样使用DAO了,如下:

/** * 账户管理服务对象 * * @author : zhouhao * @date : Created in 2019/3/18 21:13 */@Servicepublic class AccountService {    @Autowired    private PersonMapper personMapper;    /**     * 账户注册     *     * @param person person对象     * @author : zhouhao     * @date : 2019/3/24 10:51     */    public void regist(Person person){        personMapper.insertPerson(person);    }    /**     * 账户登录     *     * @param name 登录名称     * @param password 登录密码     * @return : boolean     * @author : zhouhao     * @date : 2019/3/24 10:52     */    public boolean login(String name,String password){        Person person = personMapper.selectByName(name);        return person != null && password.equals(person.getPassword());    }}

    最后,配置Mybatis是可能会遇到很多的问题,比如各个引用的包版本不匹配,数据源配置老是出错,mapper文件找不到等等。特别是一种错误叫做找不到DAO中的某一个方法,这一般是由mapper.xml文件不会被编译的原因,使用maven将之编译即可。

转载地址:https://blog.csdn.net/zh328271057/article/details/88774043 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring Boot学习(1)-----Spring Boot 基础
下一篇:Spring框架学习(5)-----集成Spring MVC

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月05日 20时17分45秒