[h2]前言[/h2]
在上一篇文章中记录了spring boot整合jdbcTemplate,这次记录一下spring boot整合Mybatis,在实际项目中这种方式还是很常用的。和上一篇文章大同小异,发现spring boot整合mybatis比spring MVC整合要来得简单得多呢。[h2]正文[/h2]pom.xml引入依赖- org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.0 mysql mysql-connector-java
复制代码- MyBatis-Spring-Boot-Starter
复制代码 会自动将我们配置的与文件注册到spring上下文,很智能。在配置文件中配置数据源- spring.datasource.url = jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8spring.datasource.username = rootspring.datasource.password = 123456spring.datasource.driver-class-name = com.mysql.cj.jdbc.Driver
复制代码 添加数据池依赖,这里用的是阿里巴巴的数据池在启动类中读取数据源配置信息,Spring Boot会自动的用我们配置的这个DataSource。添加如下代码- @Autowired private Environment environment; public DataSource dataSource(destroyMethod = "close") { DruidDataSource dataSource = new DruidDataSource(); dataSource.setUrl(environment.getProperty("datasource.url")); dataSource.setUsername(environment.getProperty("datasource.username")); dataSource.setPassword(environment.getProperty("datasource.password")); dataSource.setDriverClassName(environment.getProperty("datasource.driver-class-name")); dataSource.setInitialSize(5);//初始化时建立物理连接的个数 dataSource.setMaxActive(20);//最大连接池数量 dataSource.setMinIdle(0);//最小连接池数量 dataSource.setMaxWait(50000);//获取连接时最大等待时间,单位毫秒。 dataSource.setValidationQuery("SELECT 1");//用来检测连接是否有效的sql return dataSource; }
复制代码 下面就用我们配置的这个数据源信息,用JdbcTemplate来与数据库进行数据交互
本地创建数据库,再创建一张表,表属性如下,自行填几条数据:
1.png
[h3]简单的做了个查询的例子:[/h3]- public class User { private int id; private String name; private int age; private String address; private String phone; //set and get}
复制代码- @RestControllerpublic class UserController { @Autowired private UserService userService; private Logger logger = LoggerFactory.getLogger(this.getClass()); @RequestMapping(value = "/queryUserList",method = RequestMethod.GET,produces="application/json;charset=UTF-8") @ResponseBody public String queryLearnList(HttpServletRequest request , HttpServletResponse response){ String name = request.getParameter("name"); String phone = request.getParameter("phone"); Map params = new HashMap(); params.put("name", name); params.put("phone", phone); List userList =userService.queryUserList(params); return JSONArray.fromObject(userList).toString(); }
复制代码- public interface UserService { List queryUserList(Map params);}
复制代码- @Servicepublic class UserServiceImpl implements UserService { @Autowired UserDao userDao; @Override public List queryUserList(Map params) { return userDao.queryUserList(params); }}
复制代码 整合Mybatis
层:这里去掉了实现类,具体操作如下:- @Component@Mapperpublic interface UserDao { public List queryUserList(Map params);}
复制代码
在中增加如下配置:- #指定bean所在包mybatis.type-aliases-package=com.mlin.entiy#指定映射文件mybatis.mapperLocations=classpath:mapper/*.xml
复制代码
新建文件目录,存放在下面,在- src/main/resources/mapper
复制代码 目录下新建文件:- id,name,age,address,phone select from user 1 = 1 AND name like CONCAT(CONCAT('%',#{name,jdbcType=VARCHAR}),'%') AND phone like CONCAT(CONCAT('%',#{phone,jdbcType=VARCHAR}),'%')
复制代码
通过指定来与dao联系。[h2]结果[/h2]
启动项目,在浏览器输入:- http://localhost:8080/queryUserList
复制代码 ,得到如下结果
1.png
[h2]总结[/h2]
实践中可能遇到如下问题:
:启动项目后浏览器访问后台一直报- org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.mlin.dao.UserDao.queryUserList
复制代码
这里给出网络上的一下答案:
- 2.UserDao的方法在UserDaoMapper.xml中没有
复制代码
- 3. UserDao的方法返回值是List,而select元素没有正确配置ResultMap,或者只配置ResultType
复制代码
- 4. 如果你确认没有以上问题,请任意修改下对应的xml文件,比如删除一个空行,再试试
复制代码 上面的办法都没有解决我这里的问题,后来才发现是配置mybatis的路径名写错了,可见这个名字也是不能随便乱取的 改之前- #指定bean所在包mybatis.bean=com.mlin.entiy#指定映射文件mybatis.mapper=classpath:mapper/*.xml
复制代码 改之后:- #指定bean所在包mybatis.type-aliases-package=com.mlin.entiy#指定映射文件mybatis.mapperLocations=classpath:mapper/*.xml
复制代码 |
|