本文共 5262 字,大约阅读时间需要 17 分钟。
思维导图:
一.引言
这片文章建立在上篇文章的基础之上。在Spring集成了Spring MVC之后,我们需要利用Spring集成Mybates。这就是这片文章的功能。主要分为两个小节:
- Spring如何添加Mybatis配置
- 如何简单使用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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!