springmvc、jpa(hibernate)、mybatis组合框架搭建(二)——加入mybatis以及json返回值
来源:互联网 发布:java程序设计教程 实验 编辑:程序博客网 时间:2024/06/07 03:50
上次我们搭建了一个基本的mvc框架,这次,我们接通mybatis,并且,让返回值可以是json格式的。
mybatis
首先,我们要加入mybatis的spring配置文件spring-mybatis.xml,然后再spring-context.xml里引入它,参照上次的spring-mvc.xml的引入就好。以下,是这个文件里的内容。
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 数据源 org.apache.commons.dbcp.BasicDataSource com.alibaba.druid.pool.DruidDataSource --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"> <property name="driverClassName" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="0" /> <!-- 连接池最大使用连接数量 --> <property name="maxActive" value="20" /> <!-- 连接池最小空闲 --> <property name="minIdle" value="0" /> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="60000" /> <property name="validationQuery"><value>SELECT 1</value></property> <property name="testOnBorrow" value="false" /> <property name="testOnReturn" value="false" /> <property name="testWhileIdle" value="true" /> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="6000" /> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="25200000" /> <!-- 打开removeAbandoned功能 --> <property name="removeAbandoned" value="true" /> <!-- 1800秒,也就是30分钟 --> <property name="removeAbandonedTimeout" value="1800" /> <!-- 关闭abanded连接时输出错误日志 --> <property name="logAbandoned" value="true" /> <!-- 监控数据库 --> <!-- <property name="filters" value="stat" /> --> <!--<property name="filters" value="mergeStat" />--> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:mybatis/mapper/**/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="nature.demo.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean></beans>
可以看到的是,首先是对dataSource数据源的配置,这里我们用的是阿里的druid的数据源,原因就是网上盛传它最快,具体再测吧。这里有个很深的坑,坑了我很久,注意变量,尤其是${jdbc.username},这里我之前是${username},本来说贪省事,加多的配置再改,结果坑了很久,注意${username}这个变量拿的是当前系统的登录用户的用户名。所以,我都加了jdbc前缀,就都拿到我自己配的值了。 然后大家看下面的sqlSessionFactory的配置,里面mapperLocation的配置,指明了我扫描对应的mapper的配置文件的地方,所以我这里建立了resources/mybatis/mapper目录,里面放了demoMapper.xml文件。 后面org.mybatis.spring.mapper.MapperScannerConfigurer配置了我去哪里扫描dao接口文件,然后,用谁来解析dao接口 transactionManager是事务的配置,在这个demo里面没有用到。 为了支撑这段配置,我们需要建立对应的到接口,mapper.xml,maven依赖。我们建立了nature.demo.dao.DemoDao和demoMapper.xml
nature.demo.dao.DemoDao如下:
package nature.demo.dao;import java.util.List;import java.util.Map;/** * Created by nature on 17-7-26. */public interface DemoDao { public List<Map<String,Object>> demoSelect();}
demoMapper.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="nature.demo.dao.DemoDao"> <select id="demoSelect" resultType="java.util.HashMap"> select * from demo </select></mapper>
pom.xml中加入的依赖如下:
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${version.mybatis}</version></dependency><dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version></dependency><dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.7</version></dependency>
nature.properties中加入的属性配置如下:
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/testjdbc.username=rootjdbc.password=123456
至此,我们已经可以访问数据库了。然后,我们在之前的DemoController中加入对应的方法来访问数据库,如下:
package nature.demo.controller;import nature.demo.dao.DemoDao;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;import java.util.List;import java.util.Map;/** * Created by nature on 17-7-25. * nature的demo * */@Controller@RequestMapping("/demo")public class DemoController { @Resource private DemoDao demoDao; /** * 单纯验证 * @return */ @ResponseBody @RequestMapping("/ping") public String ping(){ return "pong"; } @ResponseBody @RequestMapping("/demoselect") public List<Map<String,Object>> demoSelect(){ return demoDao.demoSelect(); }}
如上面代码,我们加了demoSelect。如果这个时候,你访问http://localhost:8080/demo/demoselect,会发现,数据查出来了,但是,无法返回,会报错。因为,无法将List<Map<String,Object>>转化成json。需要加入一段配置,让@ResponseBody可以正常的将结果实体转化成json。我们在spring-mvc.xml中加入如下配置:
<!--使用jsonconverter,避免IE执行AJAX时,返回JSON出现下载文件 --> <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> <property name="supportedMediaTypes"> <list> <bean class="org.springframework.http.MediaType"> <constructor-arg index="0" value="text"/> <constructor-arg index="1" value="plain"/> <constructor-arg index="2" value="UTF-8"/> </bean> </list> </property> </bean> <!--接口返回中文乱码问题--> <mvc:annotation-driven> <mvc:message-converters> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes"> <list> <value>application/json;charset=UTF-8</value> <value>text/html;charset=UTF-8</value> </list> </property> </bean> </mvc:message-converters> </mvc:annotation-driven>
网上查到的很多资料用的配置Converter的方法,用到的类都是过期的,最后找到这个,有效,并且未过期,具体未研究,再说吧,后面对返回值格式控制的时候再说吧。
需要加入的依赖如下:
<!-- 使用Json所依赖的jar包 --><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.5.4</version></dependency>
阅读全文
0 0
- springmvc、jpa(hibernate)、mybatis组合框架搭建(二)——加入mybatis以及json返回值
- springmvc、jpa(hibernate)、mybatis组合框架搭建(三)——加入JPA、单元测试
- springmvc、jpa(hibernate)、mybatis组合框架搭建(一)——springmvc框架搭建
- 搭建Spring SpringMVC Mybatis 框架(二)
- Maven+Spring+SpringMVC+MyBatis框架的搭建(二)
- 利用Maven搭建Spring+SpringMVC+Mybatis框架项目(二)
- Springmvc + mybatis 组合框架
- 【Mybatis】深入浅出Mybatis(二)——Mybatis的框架
- 跟着和尚一步一步搭建springmvc+springdata-jpa+mybatis+shiro+bootstrap项目(二)
- SSM框架搭建(Spring+SpringMVC+MyBatis)
- 搭建Spring SpringMVC Mybatis 框架(一)
- SSM框架搭建(SpringMVC+Spring+Mybatis)
- Maven+SpringMVC+Mybatis项目搭建(二)
- springMVC+mybatis框架搭建
- springMVC+mybatis框架搭建
- Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
- Spring+SpringMVC+MyBatis深入学习及搭建(十三)——SpringMVC入门程序(二)
- JavaWeb实战(四)——加入MyBatis框架
- 滑动窗口的最大值——双端队列
- 220. Contains Duplicate III
- CentOS配置SSH
- const修饰类的成员函数
- 容斥模板
- springmvc、jpa(hibernate)、mybatis组合框架搭建(二)——加入mybatis以及json返回值
- 【JavaScript】匿名函数
- POJ 3301三分
- 深入理解Servlet线程安全问题
- 深入浅出TensorFlow(六)TensorFlow高层封装
- POJ 1061 青蛙的约会 扩展欧几里德 Java
- 习题 1.6 编写一个C程序,输入a, b, c 3个值,输出其中最大者。
- HDU 2187 悼念512汶川大地震遇难同胞——老人是真饿了
- Ajax异步处理和利用jquery对Ajax的使用