IDEA整合SSM框架之配置数据持久层Mybatis
配置数据持久层-Mybatis
- Mybatis是数据持久层框架,简单易学;
- SQL写在xml里,便于统一管理和优化;
- 通过提供DAO层,将业务逻辑和数据访问逻辑分离,SQLl和代码的分离,提高了可维护性;
- 提供映射标签,支持对象与数据库的orm字段关系映射;
- 提供xml标签,支持编写动态sql;
pom.xml中引入相关依赖包
- 在pom.xml的节点中引入一下依赖包
<!--spring-jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.4.RELEASE</version>
</dependency>
<!--数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.14</version>
</dependency>
<!--数据库连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--spring配置mybatis包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.0</version>
</dependency>
<!--mybatis配置-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.0</version>
</dependency>
创建数据库jdbc.properties配置文件
- 在resources文件加下创建properties包(不存在时创建,可有可无),再创建jdbc.properties文件
#数据库连接信息,数据库地址,数据库,用户名,密码,驱动以及其他信息
jdbc.url=jdbc:mysql://localhost:3306/demo?roundRobinLoadBalance=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
jdbc.username=root
jdbc.password=mysql
jdbc.driver=com.mysql.jdbc.Driver
jdbc.initialSize=5
jdbc.minIdle=5
jdbc.maxActive=100
jdbc.maxWait=100000
jdbc.testOnBorrow=false
jdbc.testOnReturn=false
jdbc.testWhileIdle=true
jdbc.timeBetweenEvictionRunsMillis=60000
jdbc.minEvictableIdleTimeMillis=25200000
jdbc.removeAbandoned=true
jdbc.removeAbandonedTimeout=1800
jdbc.logAbandoned=true
创建dao、entity、mapper包路径
- 在main/java 下创建dao、entity、mapper包路径
创建mybatis配置文件spring-mybatis.xml
这个文件的主要作用就是整合spring与mybatis, 同时配置数据库数据源、数据库连接池、 dao、entity、mapper路径,以及配置数据库事务与spring配置
- 在resources文件加下创建xml包(不存在时创建,可有可无),再创建spring-mybatis.xml文件,右击xml包,new->XML Confiuration File -> Spring Config,
<?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:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
">
<!--扫描JDBC配置文件-->
<!--ignore-unresolvable忽略占位符,解决对个context:property-placeholder标签无法解析报错的问题-->
<context:property-placeholder location="classpath:properties/jdbc.properties" ignore-unresolvable="true"/>
<!--配置数据库连接池-->
<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="${jdbc.initialSize}"/>
<property name="maxActive" value="${jdbc.maxActive}"/>
<property name="maxWait" value="${jdbc.maxWait}"/>
<property name="minIdle" value="${jdbc.minIdle}"/>
<property name="testOnBorrow" value="${jdbc.testOnBorrow}"/>
<property name="testOnReturn" value="${jdbc.testOnReturn}"/>
<property name="testWhileIdle" value="${jdbc.testWhileIdle}"/>
<property name="timeBetweenEvictionRunsMillis" value="${jdbc.timeBetweenEvictionRunsMillis}"/>
<property name="minEvictableIdleTimeMillis" value="${jdbc.minEvictableIdleTimeMillis}"/>
<property name="removeAbandonedTimeout" value="${jdbc.removeAbandonedTimeout}"/>
<property name="removeAbandoned" value="${jdbc.removeAbandoned}"/>
<property name="logAbandoned" value="${jdbc.logAbandoned}"/>
</bean>
<!--配置数据库连接工程-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--配置数据源-->
<property name="dataSource" ref="dataSource"/>
<!--扫描实体类包路径-->
<property name="typeAliasesPackage" value="com.xiao.demo.springmvc.mybatis.entity"/>
<!--扫描Mapper文件路径 文件命名方式***Mapper.xml-->
<property name="mapperLocations" value="classpath:com/xiao/demo/springmvc/mybatis/mapper/*Mapper.xml"/>
</bean>
<!--扫描Mapper接口-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
<!--mapper接口dao包路径-->
<property name="basePackage" value="com.xiao.demo.springmvc.mybatis.dao"/>
</bean>
<!--负责管理MyBatis的SqlSession-->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
<!--开启数据库事务-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--transactionManager 指定事务管理器-->
<tx:annotation-driven proxy-target-class="false" transaction-manager="transactionManager"/>
</beans>
在pom.xml中配置,将xml打包在war中
- 在pom.xml中配置,将*.Mapper.xml文件打包在war包中,不然会报mapper路径不存在
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*.*</include>
<include>**.*</include>
<include>**/*.*</include>
</includes>
</resource>
</resources>
生成dao、entity、mapper
使用mybatis-generator插件生成dao、entity、mapper,请参照一下案例
IDEA整合SSM框架之配置mybatis-generator插件(四)
实现数据库增删改查接口
通过已配置好的mybatis对数据库进行增删改查功能,并实现接口访问
创建接口TUserService
/**
* 用户业务层接口
*
* @author xiaog.li
* @date 2019/8/5 23:21
*/
public interface TUserService {
/**
* 增
*
* @return int
* @date 2019/8/6 21:38
*/
Object add();
/**
* 根据主键删除
*
* @return int
* @date 2019/8/6 21:38
*/
Object delete(Integer id);
/**
* 更新
*
* @return
*/
Object update(Integer id);
/**
* 查询
*
* @param id
* @return
*/
Object select(Integer id);
}
创建类TUserServiceImpl实现TUserService接口
实现TUserService接口,处理业务逻辑
@Service 注解为业务逻辑层
@Component 无明确分类,可以被注入到spring容器进行管理
@Repository 数据持久层 这里未使用
/**
* 业务实现
*
* @author xiaog.li
* @date 2019/8/6 22:41
*/
@Service
public class TUserServiceImpl implements TUserService {
@Autowired
private TUserMapper tUserMapper;
@Override
public Object add() {
TUser user = new TUser();
user.setRealName("李");
user.setUserName("四");
user.setSex("男");
user.setTel("156****8888");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
return tUserMapper.insertSelective(user) > 0 ?
RestResult.ok("添加成功") : RestResult.fail("添加失败");
}
@Override
public Object delete(Integer id) {
return tUserMapper.deleteByPrimaryKey(id) > 0 ?
RestResult.ok("删除成功") : RestResult.fail("删除失败");
}
@Override
public Object update(Integer id) {
TUser user = new TUser();
user.setRealName("王");
user.setUserName("五");
user.setSex("女");
user.setTel("156****6666");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
user.setId(id);
return tUserMapper.updateByPrimaryKeySelective(user) > 0 ?
RestResult.ok("更新成功") : RestResult.fail("更新失败");
}
@Override
public Object select(Integer id) {
TUser user = tUserMapper.selectByPrimaryKey(id);
return user==null?
RestResult.fail("查询失败"):RestResult.ok("查询成功",user);
}
}
创建TUserController
@RestController注解类,该类中的所有接口都返回数据
@Controller注解类,没有使用@ResponseBody注解的方法,返回网页,jsp或者html
@Controller注解类,@ResponseBody注解方法,功能@RestController注解相同,
如果所有接口都返回String数据,直接使用@RestController注解类,反之使用组合注解
@RequestMapping注解实现访问地址,
value是接口地址,
produces返回数据类型以及编码格式,可解决中文乱码问题,
method 请求方式
/**
* 控制层 映射对外接口请求地址
*/
@RestController
@RequestMapping(value = "/user")
public class TUserController {
@Autowired
private TUserService tUserService;
@RequestMapping(value = "/add", produces = "application/json;charset=utf-8")
public Object add() {
return tUserService.add();
}
@RequestMapping(value = "/delete", produces = "application/json;charset=utf-8")
public Object delete(Integer id) {
return tUserService.delete(id);
}
@RequestMapping(value = "/update", produces = "application/json;charset=utf-8")
public Object update(Integer id) {
return tUserService.update(id);
}
@RequestMapping(value = "/select", produces = "application/json;charset=utf-8")
public Object select(Integer id) {
return tUserService.select(id);
}
}
配置文件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: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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--扫码控制器路径-->
<context:component-scan base-package="com.xiao.demo.springmvc.controller"/>
<!--扫码控制器服务层-->
<context:component-scan base-package="com.xiao.demo.springmvc.service"/>
<!--启动注解-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
<value>application/xml;charset=UTF-8</value>
</list>
</property>
<property name="features">
<list>
<value>DisableCheckSpecialChar</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
</beans>
返回数据工具RestResult
/**
* 返回数据实体类
*
* @author xiaog.li
* @date 2019/8/6 21:55
*/
public class RestResult {
private static Map<String, Object> result(String code, String msg, Object data) {
Map<String, Object> map = new HashMap<>();
map.put("code", code);
map.put("msg", msg);
map.put("data", data);
return map;
}
public static Map<String, Object> ok(String msg, Object data) {
return result("0", msg, data);
}
public static Map<String, Object> ok(String msg) {
return ok(msg, null);
}
public static Map<String, Object> ok() {
return ok("操作成功");
}
public static Map<String, Object> fail(String msg) {
return result("1", msg, null);
}
public static Map<String, Object> fail() {
return fail("操作失败");
}
}
运行项目,浏览器测试接口
- 新增
- 删除
- 更新
- 查询
写在最后
人这一生也没有多少时间可以挥霍,
踏实一点,务实一些,
做自己想做的事,
如此简单!