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("操作失败");
    }
}

运行项目,浏览器测试接口

  • 新增
    在这里插入图片描述
  • 删除
    在这里插入图片描述
  • 更新
    在这里插入图片描述
  • 查询
    在这里插入图片描述

IDEA整合SSM框架教程

写在最后

人这一生也没有多少时间可以挥霍,
踏实一点,务实一些,
做自己想做的事,
如此简单!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值