Spring+MyBatis实践—MyBatis数据库访问

关于spring整合mybatis的工程配置,已经在Spring+MyBatis实践—工程配置中全部详细列出。在此,记录一下几种通过MyBatis访问数据库的方式。

  • 通过sqlSessionTemplate来进行数据库访问。
  • 通过Dao接口来进行数据库访问。
  • 使用@Select注解形式访问数据库

1、在spring框架中使用mybatis来进行数据操作配置,参考Spring+MyBatis实践—工程配置的spring-datasources.xml文件。

2、Demo1—通过sqlSessionTemplate来进行数据库访问:

首先,定义一实体类User,并且在数据库(MySQL)中建立了相应的数据表。

 1 public class User {
 2     private int userId;
 3     private String name;
 4     private String pwd;
 5     private String email;
 6     private String address;
 7     private String signature;
 8     private String phone;
 9
10         /*构造器和getter、setter方法*/
11 }

接着,编写对数据库中表tb_user的映射文件User.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="com.crazysnail.dao.UserDao">
    <select id="getUserByUserId" resultType="User" parameterType="int">
        select *
        from tb_user
        where userid=#{userId}
    </select>
</mapper>

【注:注意映射文件开始处指定的命名空间。】

此时,可以通过sqlSessionTemplate来进行数据访问了。

@Service
public class UserService {
    @Autowired
    private SqlSessionTemplate sqlSessionTemplate;

    public User getUserByUserId(int userId){
        User user = (User)sqlSessionTemplate.selectOne("com.crazysnail.dao.UserDao.getUserByUserId", 1);

        return user;
    }
}

【注:sqlSessionTemplate的selectOne方法中的com.crazysnail.dao.UserDao.getUserByUserId要对应到映射文件中的select语句的id,参数通过selectOne的第二个进行传入。】

3、Demo2—通过Dao接口来进行数据库访问。

通过上述方式来访问数据库,比较繁琐,不直观。此时,可以采用另外一种方式来调用映射文件User.xml中的数据库操作。

接着Demo1所做的工作,继续编写UserDao接口。

1 package com.crazysnail.dao;
2
3 import com.crazysnail.domain.User;
4
5 public interface UserDao {
6     public User getUserByUserId(int userId);
7
8 }

在spring的配置文件中添加如下配置(该配置已经在Spring+MyBatis实践—工程配置的spring-datasources.xml文件中添加):

<!-- 用于将接口映射为具体的实例 ,使得在Service中可以直接注入相关的Dao接口来进行数据访问-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
        p:sqlSessionFactory-ref="sqlSessionFactory"
        p:basePackage="com.crazysnail.dao"
        />

该bean用于将Dao接口映射到对应的映射文件,其中映射文件的命名空间对应Dao接口的全称。这就使得UserDao接口同User.xml文件关联起来。

【说明:关联关系的建立,是通过在User.xml文件定义时指定的命名空间名称。User.xml的命名空间定义为com.crazysnail.dao.UserDao,正是UserDao接口的全称。同时,需要注意,在UserDao接口中声明的方法名要对应到User.xml中定义的数据访问过程的id,接口中方法的形参类型对应到User.xml中数据访问过程的parameterType,方法的形参名对应到User.xml中数据访问过程中sql语句中的参数,接口方法的返回值类型对应User.xml中的resultType声明的类型。

如UserDao接口中的方法,

1 public User getUserByUserId(int userId);

对应User.xml中的

<select id="getUserByUserId" resultType="User" parameterType="int">
        select *
        from tb_user
        where userid=#{userId}
</select>

说明结束。】

最后,就可以在service中通过注入UserDao,调用UserDao中声明的接口来进行数据处理了。

1 @Service
2 public class UserService {
3     @Autowired
4     private UserDao userDao;
5
6     public User getUser(int id){
7         return userDao.getUserByUserId(id);
8     }
9 }

注意:使得MyBatis的数据访问的Xml生效,需要在配置SqlSessionFactoryBean时,通过p:mapperLocations="classpath:com/crazysnail/domain/mybatisConfig/*.xml"进行声明。

4、Demo3—省略映射文件,使用注解:

MyBatis的org.apache.ibatis.annotations包中提供的关于数据访问的注解包括@Select、@Update、@Delete、@Insert,可以用来直接注入简单的SQL语句,省略映射文件。也可映射文件、注解两者结合使用。

单独使用注解时,可以省略掉

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
        p:dataSource-ref="dataSource"
        p:configLocation="classpath:mybatisConfig.xml"
        p:mapperLocations="classpath:com/crazysnail/domain/mybatisConfig/*.xml"
        />

中的p:mapperLocations="classpath:com/crazysnail/domain/mybatisConfig/*.xml" 关于映射文件位置的配置。

实例,改写Demo2中的Dao接口,并将映射文件的相关配置去掉,Service层中的代码不改变即可。

1  package com.crazysnail.dao;
2
3  import com.crazysnail.domain.User;
4
5  public interface UserDao {
6     @Select("select * from tb_user where userid=#{userId}")
7     public User getUserByUserId(int userId);
8
9  }

Spring+MyBatis实践—MyBatis数据库访问

时间: 2024-10-14 04:56:55

Spring+MyBatis实践—MyBatis数据库访问的相关文章

MyBatis 实践 --Mapper与DAO

MyBatis 实践 MyBatis简介 MyBatis前身是iBatis,是一个基于Java的数据持久层/对象关系映射(ORM)框架. MyBatis是对JDBC的封装,使开发人员只需关注SQL本身,而不需花费过多的精力去处理如注册驱动.设置参数.创建Connection/Statement.解析结果集等JDBC过程性代码.MyBatis基于XML/注解的方式配置Statement,执行SQL,并将执行结果映射成Java对象, 大大降低了数据库开发的难度. MyBatis is a first

[spring+springmvc+mybatis实践]学生社团管理系统

一.简介 ssm框架为现在十分流行的mvc主流框架.mybatis负责与数据库交互,springmvc与spring完美适配,负责控制器和视图渲染.之前有初步学习过ssm框架,这次借学校里的web课设实践一番,并总结出一些问题.前端使用的是bootstrap框架. 二.项目简介 社团是学校个性化设置的综合实践课程,也是培养学生综合素质和个人兴趣的有效途径.为给同学们提供社团的各方面信息,让同学们及时了解社团动态,积极参加社团活动,本系统拟开发实现学校社团报名课程管理系统,包括前台各个社团信息的展

Spring mvc整合mybatis基于mysql数据库实现用户增删改查及其分页显示的完整入门实例【转】

Spring mvc整合mybatis例子, 基于mysql数据库实现对用户的增.删.改.查,及分页显示的完整例子. 查询显示用户 添加用户 更新用户 官方验证: 项目截图 必须修改applicationContext.xml中mysql的配置为本地的,否则启动失败. 另外jar包多一个ehcache.jar无关紧要,删除即可. 1. 使用阿里巴巴Druid连接池(高效.功能强大.可扩展性好的数据库连接池.监控数据库访问性能.支持Common-Logging.Log4j和JdkLog,监控数据库

Spring+MyBatis实践—登录和权限控制

1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest的getSession方法获得.同时,HttpSession对象对应Jsp内置对象session,在jsp页面中也可以通过session来访问,如通过jstl标签库来访问session中的内容: <c:if test="${sessionScope.username == null}"

Spring+MyBatis实践——登录与权限控制

Spring+MyBatis实践--登录与权限控制 1.实现用户登录功能: 通过session来实现用户登录功能.在用户登录时,将用户的相关信息放在HttpSession对象用,其中HttpSession对象可以通过HttpServletRequest的getSession方法获得.同时,HttpSession对象对应Jsp内置对象session,在jsp页面中也可以通过session来访问,如通过jstl标签库来访问session中的内容: Html代码   <c:if test="${

SpringBoot数据库访问工具(JdbcTemplate、MyBatis、JPA、Hibernate)

SpringBoot数据库访问 关系型数据库访问(RDBMS) 采用JdbcTemplate.MyBatis.JPA.Hibernate等技术. 一.JdbcTemplate工具 1.在pom.xml添加boot-starter-jdbc定义<dependencies> 数据库驱动 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifac

java数据库访问(四)—Mybatis

前述的几种java访问数据库的方式: jdbc是最原始的方式,使用比较繁琐: JdbcTemplate方式相对方便性有一些提高,但在工程应用中仍然很不方便. 接下来继续记录使用持久化框架来进行数据库操作,本文记录使用Mybatis进行记录的的简单示例: 1.定义 官网的定义: MyBatis is a first class persistence framework with support for custom SQL, stored procedures and advanced mapp

Spring+MyBatis实践—中文乱码

多种中文乱码问题及解决: jsp页面乱码 表单提交乱码 URL中文参数乱码 1.jsp页面乱码解决(2步): 新建jsp页面: <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans

Spring+Mybatis实现主从数据库读写分离

Spring+Mybatis实现主从数据库读写分离 采用配置+注解的方式. 自定义@DataSource注解 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME