Mybatis在Spring下的使用

说明

Mybatis是ORM(对象关系映射)的一种,MyBatis是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。

本文将使用@注解和xml配置的两种方式混合来演示。两种模式各有特点,注解版适合简单快速的模式,其实像现在流行的这种微服务模式,一个微服务就会对应一个自已的数据库,多表连接查询的需求会大大的降低,会越来越适合这种模式。xml老传统模式比适合大型项目,可以灵活的动态生成SQL,方便调整SQL,也有痛痛快快,洋洋洒洒的写SQL的感觉。

本文将会构建一个基于Maven的SpringMVC与Mybatis for Spring的项目(使用SQLServer)。

mybatis-spring介绍:http://www.mybatis.org/spring/zh/index.html

本项目的代码github地址:https://github.com/Yunlingfly/sometest.git

快速开始

首先给出项目结构

创建数据库表userinfo:

create table userinfo
(
	id int not null,
	username nvarchar(50),
	primary key (id)
)
insert into usertest(id,username) values(0,'yunlingfly')
insert into usertest(id,username) values(1,'sometest')

1 更新pom.xml

 

注意mybatis-spring与mybatis版本对应问题

MyBatis-SpringMyBatisSpring
1.0.0 and 1.0.13.0.1 to 3.0.53.0.0 or higher
1.0.23.0.63.0.0 or higher
1.1.0 or higher3.1.0 or higher3.0.0 or higher
1.3.0 or higher3.4.0 or higher3.0.0 or higher
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>yunlingfly</groupId>
	<artifactId>Maven_MyBatis</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Maven_MyBatis Maven Webapp</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
		</dependency>

		<!-- 整合时mybatis-spring与mybatis都需要,log4j是mybatis需要的jar -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.0</version>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>

		<!-- 使得springMVC能返回json字符串 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.8.4</version>
		</dependency>

		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.10</version>
		</dependency>
	</dependencies>

	<!-- 版本管理工具 -->
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework</groupId>
				<artifactId>spring-framework-bom</artifactId>
				<version>4.1.2.RELEASE</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<finalName>Maven_MyBatis</finalName>
		<plugins>
			<!-- war部署使用 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<warName>Maven_MyBatis</warName><!-- 设置打包后war包的名字 -->
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

2 更新web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

	<!-- 使用Listener加载Spring配置文件 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

	<!-- Spring配置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			classpath:spring-servlet.xml,
			classpath:mybatis-source.xml
		</param-value>
	</context-param>
	
	<!-- spring-mvc分发器配置并指定spring-mvc配置文件 -->
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- 配置文件位置 -->
			<param-value>classpath:spring-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>	<!-- 启动时加载 -->
	</servlet>
	<!-- 字符编码过滤器 -->
	<filter>
		<filter-name>SpringEncodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>


    <servlet-mapping>
        <servlet-name>spring</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <filter-mapping>
    	<filter-name>SpringEncodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

3 新建mvc配置文件spring-servlet.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:tx="http://www.springframework.org/schema/tx"
	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.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context.xsd 
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx.xsd
   	   http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- 配置扫描的包 -->
	<context:component-scan base-package="controller" />

	<!-- 注册HandlerMapper、HandlerAdapter两个映射类 -->
	<mvc:annotation-driven />

	<!-- 访问静态资源 -->
	<mvc:default-servlet-handler />
	
	<!-- 视图解析器 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

4 新建SpringMvcController.java

package controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class SpringMvcController {
    @RequestMapping("/index")
    public ModelAndView index(){
    	ModelAndView mv=new ModelAndView("demo");
    	return mv;
//        return "demo";
    }
}

5 新建/WEB-INF/view/demo.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>首页</title>
</head>
<body>
    <h1>This is SpringMVC Demo</h1>
</body>
</html>

--------------------分割线-----------------------------springMVC到这里配置完毕----------------------------------------------

6 新建POJO类Person.java

package bean;

public class Person {
	private Integer id;
	private String user_name;//特意和数据库的属性名不一致
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUser_name() {
		return user_name;
	}
	public void setUser_name(String user_name) {
		this.user_name = user_name;
	}
	

}

7 新建mybatis的配置mybatis-source.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:tx="http://www.springframework.org/schema/tx"
	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.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd
   	   http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">

	<!-- 配置扫描的包 -->
	<context:component-scan base-package="dao" />

	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
		<property name="url" value="jdbc:sqlserver://115.159.115.102:1433; DatabaseName=sometest" />
		<property name="username" value="zzy"></property>
		<property name="password" value="008888zzy"></property>
	</bean>
	
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="configLocation" value="classpath:mybatis-config.xml"/>
		<property name="dataSource" ref="dataSource"/>
		<property name="mapperLocations" value="classpath:dao/*.xml"/><!-- 需要使用xml配置SQL时使用 -->
		<property name="typeAliasesPackage" value="bean"/><!-- 设置实体类 -->
	</bean>
	
	<!-- 设置扫描的包,类似@MapperScan -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="dao"/>
	</bean>
</beans>

8 新建mybatis的一些基础设置mybatis-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC " -//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
	<settings>
		<setting name="logImpl" value="LOG4J"/>
		<setting name="cacheEnabled" value="true"/>
		<setting name="mapUnderscoreToCamelCase" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
	</settings>
</configuration>

9 新建配置log4j的配置文件log4j.properties(先新建在目录xxx/xxx/xxx/ 新建 log.log文件)

log4j.rootLogger = debug , D ,  E
### \u8F93\u51FA\u5230\u65E5\u5FD7\u6587\u4EF6 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
# 在下面的属性设置log文件的位置
log4j.appender.D.File = xxx/xxx/xxx/log.log
log4j.appender.D.DatePattern = '.'yyyy-MM-dd 
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO 
## \u8F93\u51FADEBUG\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
### \u4FDD\u5B58\u5F02\u5E38\u4FE1\u606F\u5230\u5355\u72EC\u6587\u4EF6 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
# 在下面的属性设置log文件的位置
log4j.appender.E.File = xxx/xxx/xxx/log.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
## \u53EA\u8F93\u51FAERROR\u7EA7\u522B\u4EE5\u4E0A\u7684\u65E5\u5FD7!!!
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern =%-d{yyyy-MM-dd HH\:mm\:ss}  [ %t\:%r ] - [ %p ]  %m%n

10 新建一个DAO层的接口IPersonDAO.java(更多@注解与xml配置的操作我在另一篇文章的DAO层接口已经写过就不写了,是一样的操作,需要的戳-->Mybatis在SpringBoot下的使用

package dao;

import java.util.List;

import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Component;

import bean.Person;

/** 
 * @Select 是查询类的注解,所有的查询均使用这个 
 * @Result 修饰返回的结果集,关联实体类属性和数据库字段一一对应,如果实体类属性和数据库属性名保持一致,就不需要这个属性来修饰。 
 * @Insert 插入数据库使用,直接传入实体类会自动解析属性到对应的值 
 * @Update 负责修改,也可以直接传入对象 
 * @delete 负责删除 
 */ 
@Component
public interface IPersonDAO {
	@Select("SELECT * FROM userinfo")
	@Results({ 
		@Result(property = "id", column = "id"), 
		@Result(property = "user_name", column = "username") })
	List<Person> getAll();
	
    // 上面的是使用@注解配置的mybatis
    // 下面是使用xml配置的mybatis
    List<Person> selectAll();

    void insertOne(Person person);
}

11 编写mybatis使用xml文件配置方式编写sql的resource/dao/IPersonDAO.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="dao.IPersonDAO">
    <resultMap id="BaseResultMap" type="bean.Person" >
        <id column="id" property="id" jdbcType="INTEGER" />
        <result column="username" property="user_name" jdbcType="NVARCHAR" />
    </resultMap>

    <select id="selectAll" resultMap="BaseResultMap">
        SELECT id,username FROM userinfo
    </select>

    <insert id="insertOne" parameterType="bean.Person">
        INSERT INTO userinfo (id, username) VALUES (#{id}, #{user_name})
    </insert>

</mapper>

12 编写Controller层代码PersonMybatisController.java

package controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSON;

import bean.Person;
import dao.IPersonDAO;

@RestController
public class PersonMybatisController {
	@Autowired
	private IPersonDAO iPersonDAO;
    
    @RequestMapping("/getAll")
    public List<Person> getAll(){
    	List<Person> all = iPersonDAO.getAll();
    	System.out.println("查出的数据为:"+JSON.toJSONString(all));
    	return all;
    }
    
    @RequestMapping("/insertOne")
    public List<Person> insertOne(@RequestParam String id,@RequestParam String name){
    	Person p=new Person();
    	p.setId(Integer.valueOf(id));
    	p.setUser_name(name);
    	iPersonDAO.insertOne(p);
    	return iPersonDAO.selectAll();
    }
}

运行

使用maven install打包后放入tomcat或者直接使用自带Tomcat右键项目Run as->Server application来启动项目,输入http://localhost:8080/Maven_MyBatis/index即可看到springMVC运行效果

输入http://localhost:8080/Maven_MyBatis/getAll使用的是@注解配置的mybatis读出数据

输入http://localhost:8080/Maven_MyBatis/insertOne?name=somea&id=3使用的是xml文件配置的mybatis插入数据再读出数据

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值