MyBatis + Spring 的使用

刚接触mybatis+spring的使用的时候会很蒙,看的懂代码但是不知道写代码的过程是怎样的。

写代码要看个人习惯,以下是我总结的流程:

(图片是我经过svn之后的,忽略图标)

要引的jar包:



工程样式:



1.创建工程后引入jar包,建立一个model包,包内存放实体bean:

    

package com.qckj.model;

public class Job {
	private Integer jobid;
	private String jobcontent;
	private Integer uid;
	public Integer getJobid() {
		return jobid;
	}
	public void setJobid(Integer jobid) {
		this.jobid = jobid;
	}
	public String getJobcontent() {
		return jobcontent;
	}
	public void setJobcontent(String jobcontent) {
		this.jobcontent = jobcontent;
	}
	public Integer getUid() {
		return uid;
	}
	public void setUid(Integer uid) {
		this.uid = uid;
	}
}

2.创建一个mybatis-config.xml文件,在其中配置POJO简写:

<?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>
	<!-- 配置POJO简写 -->
	<typeAliases>
		<package name="com.qckj.model"/>
	</typeAliases>
</configuration>


3.创建一个mapper包,在包中创建一个jobmapper接口以及jobmapper.xml文件。

jobmapper接口中放入增删改查的抽象方法:

package com.qckj.mapper;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.qckj.model.Job;
@Repository("jobMapper")
public interface JobMapper {
	public List<Map<String,Object>> sel(Map<String,Object> map);   //找到funcmapper.xml进行查询
	public int ins(Job job);
}

jobmapper.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">
<!-- namespace:包名.接口名 -->
<mapper namespace="com.qckj.mapper.JobMapper">
	<sql id="selColumn">jobid,jobcontent,uid</sql>
	<sql id="setColumn">(jobcontent,uid)</sql>
	<sql id="whereColumn">
		<where>
			<if test="jobid != null">
				jobid = #{jobid}
			</if>
			<if test="jobcontent != null">
				AND jobcontent LIKE CONCAT('%',#{jobcontent},'%')
			</if>
			<if test="uid != null">
				AND uid = #{uid}
			</if>
		</where>
	</sql>
	<select id="sel" parameterType="map" resultType="map">
		SELECT
			<include refid="selColumn"/>
		FROM
			tab_job
		<include refid="whereColumn"/>
	</select>
	<insert id="ins" parameterType="Job">
		INSERT 
			INTO
				tab_job
				<include refid="setColumn"/>
			 VALUES(#{jobcontent},#{uid})
	</insert>
</mapper>



4.创建application-context.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:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="  
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/aop 
		http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
		http://www.springframework.org/schema/tx 
		http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">
		
		<!-- 连接数据库 -->
	 <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	 												<!-- id随便起名字,class的值在spring-jdbc.jar包下 -->
	 	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	 												<!-- value的值在spring-jdbc-4.2.6.RELEASE.jar包下 -->
	 	<property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
	 												<!-- 连接数据库的路径  这里我的数据库的名字是mydb -->
	 	<property name="username" value="root"/>
	 	<property name="password" value="root"/>
	 </bean>
	 
	 <!-- 读取mybatis配置文件 -->
	 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	 												<!-- class的值是在mybatis-spring-1.3.0.jar包下 -->
	 	<property name="dataSource" ref="dataSource"/>
	 												<!-- 连接上边的数据库,ref的值=上边bean中id的值 -->
	 	<property name="configLocation" value="classpath:mybatis-config.xml"/>
	 												<!-- value的值中“classpath: ” 是固定格式,后边是之前设置的mybatis-config.xml文件-->
	 </bean>
	 
	 <!-- 扫描mapper文件 -->
	 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	 												<!-- class的值在 mybatis-spring-1.3.0.jar包下-->
	 	<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
	 												<!-- 连接上边的读取mybatis配置文件的bean的id -->
	 	<property name="basePackage" value="com.qckj.mapper"/>
	 												<!-- 扫描mapper文件,读取增删改查的内容 -->
	 </bean>
	 <!-- 创建事物进行提交回滚 -->
	 <bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	 												<!-- class的值在spring-jdbc-4.2.6.RELEASE.jar包下 -->
	 	<property name="dataSource" ref="dataSource"/>
	 												<!-- 连接“连接数据库”的bean中的id -->
	 </bean>
	 
	  <!-- 注解式事务管理 -->
	 <tx:annotation-driven transaction-manager="tranManager"/>
	 
	 <!-- 打开注解 -->
	 <context:annotation-config/>
	 
	  <!-- 扫描注解 -->
	 <context:component-scan base-package="com.qckj"/>
</beans>

以下是引用jar包的位置

连接数据库时:<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">


<property name="driverClassName" value="com.mysql.jdbc.Driver"/>


 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">


<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">


 <bean id="tranManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">




5.再建立service包,在其中建立一个service接口以及serviceImp实现service接口的实现类。

    service接口中写接收的值+返回的值,和原来一样的是逻辑控制层:

package com.qckj.service;

import java.util.List;
import java.util.Map;

import com.qckj.model.Job;

public interface Services {
	public List<Map<String,Object>> selJob(Map<String,Object> map);//接口接收map的传值,返回一个list集合
	public int insJob(Job job);
}

serviceImp实现类中内容更多一些,需要通过set注入的方法以及注解的方式连接jobmapper:

package com.qckj.service.imp;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.qckj.mapper.JobMapper;
import com.qckj.model.Job;
import com.qckj.service.Services;
@Service("services")
@Transactional   //自动处理事物进行提交和回滚
public class ServiceImp implements Services {
	@Autowired
	JobMapper jobMapper;//连接了jobmapper的接口
	
	public void setJobMapper(JobMapper jobMapper) {
		this.jobMapper = jobMapper;      //通过set方法注入
	}
	public List<Map<String,Object>> selJob(Map<String,Object> map) {
		List<Map<String,Object>> datalist = jobMapper.sel(map);   //在jobmapper接口中找到sel方法
		return datalist;
	}
	public int insJob(Job job) {
		int affectrow = jobMapper.ins(job);
		return affectrow;
	}
}


6.返回mapper写mapper注解,然后再写service注解(这里是正常应该的步骤  但是上边的代码直接带注解的)


7.创建test,写test相关的注解调用service

package com.qckj.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
import com.qckj.model.Job;
import com.qckj.service.Services;

@RunWith(SpringJUnit4ClassRunner.class) //让测试运行于Spring测试环境
@ContextConfiguration("classpath:application-context.xml")
public class TestMS {
	@Autowired
	Services services;  //连接service接口 

	public void setServices(Services services) {
		this.services = services;
	}
	@Test			//通过set注入的方式进入service进行查询
	public void sel() {
		Map<String,Object> map = new HashMap<String,Object>();
		map.put("jobid", 1);//查询id为1的工作
		List<Map<String,Object>> datalist =services.selJob(map);  //传参到service中的seljob方法
		for (int i = 0; i < datalist.size(); i++) {
			Map<String,Object> dataMap = datalist.get(i);
			System.out.println(dataMap.get("jobid")
					+ "," + dataMap.get("jobcontent")
					+ "," + dataMap.get("uid"));
		}
	}
	@Test
	public void ins() {
		Job job = new Job();
		job.setJobcontent("hello1");
		job.setUid(2);
		int affectrow =services.insJob(job);
		assertEquals("插入失败",0, affectrow);
	}
}











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

荼蘼_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值