MyBatis 和 Springmvc 的整合(二)

d. 本次使用的是 Oracle 11g 数据库,建表SQL 脚本:

-------Table : users-----------------------------------------------------------------------------------------------------------------------------------
drop table users;

create table users(
  userId number(10) not null,
  username varchar2(30) not null,
  birthday date default null,
  sex char(1) default 1 check (sex in (0, 1)),
  address varchar2(200) not null,
  detail varchar2(1000) default ‘no detail‘,
  score number(4,2) default null,
  primary key (userId));

comment on column users.sex is ‘0: female 1: male‘;

/*
--添加注释
-- comment on table users is ‘用户表‘;
-- comment on column users.userId is ‘用户编号‘;
-- comment on column users.sex is ‘0: female 1: male‘;
--修改表中字段的默认值
  alter table users modify (detail varchar2(1000) default (‘no detail‘));
  alter table users modify (sex char(1) default 1 check (sex in (0, 1)));
-- 
*/

/*
--创建序列Sequence
create sequence seq_userId
minvalue 100100      --最小值
nomaxvalue      --不设置最大值(由机器决定),或 根据表字段的值范围设置 maxvalue
start with 100100    --从1开始计数,数值可变
increment by 2  --每次加1,数值可变
nocycle         --一直累加,不循环
nocache         --不建缓冲区,如果建立cache那么系统将自动读取cache值 个seq,这样会加快运行速度;如果当机或oracle死了,那么下次读取的seq值将不连贯
*/

create sequence seq_userId minvalue 100100 maxvalue 9999999999 start with 100100 increment by 1;

--创建触发器
create or replace trigger tg_insertUser
before insert on users for each row when (new.userId is null)
begin
  select seq_userId.Nextval into:new.userId from dual;
end;

--测试:
insert into users (username, birthday, sex, address, socre) values (‘Oracle‘, to_date(‘1991-08-25 19:55:45‘, ‘yyyy-mm-dd hh24:mi:ss‘), 1, ‘ShangHai‘, 99.50);

-------Table : orders-----------------------------------------------------------------------------------------------------------------------------------
drop table orders;

create table orders(
  orderId number(11) not null,
  user_id number(10) not null,
  orderNumber varchar2(20) not null,
  primary key (orderId),
  constraint fk_orders_users foreign key (user_id) references users (userId) on delete cascade
);

create sequence seq_orderId minvalue 1000000 maxvalue 99999999999 start with 1000000 increment by 1;

create or replace trigger tg_insertOrders
before insert on orders for each row when (new.orderId is null)
begin
  select seq_orderId.Nextval into:new.orderId from dual;
end;

insert into orders values(seq_orderId.Nextval, 100102, ‘ord100101‘);
insert into orders values(seq_orderId.Nextval, 100106, ‘ord100102‘);
insert into orders values(seq_orderId.Nextval, 100108, ‘ord100103‘);
insert into orders values(seq_orderId.Nextval, 100108, ‘ord100104‘);

-------Table : items-----------------------------------------------------------------------------------------------------------------------------------
drop table items;

create table items(
  itemId number(11) not null,
  itemName varchar2(30) not null,
  itemPrice number(11,2) not null,
  itemDetail varchar2(200) not null,
  primary key (itemId)
);

create sequence seq_itemId minvalue 1000000 maxvalue 99999999999 start with 1000000 increment by 1;

create or replace trigger tg_insertItem
before insert on items for each row when (new.itemId is null)
begin
  select seq_itemId.Nextval into:new.itemId from dual;
end;

insert into items values(seq_itemId.Nextval, ‘milk‘, 12.50, ‘good milk‘);
insert into items values(seq_itemId.Nextval, ‘car‘, 65000.50, ‘fast car‘);
insert into items values(seq_itemId.Nextval, ‘Australia Steak‘, 188.50, ‘delicious‘);
insert into items values(seq_itemId.Nextval, ‘UA Bag‘, 350, ‘cool‘);

-------Table : orderDetail-----------------------------------------------------------------------------------------------------------------------------------
drop table orderDetail;

create table orderDetail(
  orderDetailId number(11) not null,
  order_id number(11) not null,
  item_id number(11) not null,
  item_number number(8) not null,
  item_price number(11,2) not null,
  primary key (orderDetailId),
  constraint fk_orderDetail_orders foreign key (order_id) references orders (orderId),
  constraint fk_orderDetail_items foreign key (item_id) references items (itemId)
);

create sequence seq_orderDetailId minvalue 1000000 maxvalue 99999999999 start with 1000000 increment by 1;

create or replace trigger tg_insertOrderDetail
before insert on orderDetail for each row when (new.orderDetailId is null)
begin
  select seq_orderDetailId.Nextval into:new.orderDetailId from dual;
end;

insert into orderDetail values(seq_orderDetailId.Nextval, 1000001, 1000002, 1, 65000.50);
insert into orderDetail values(seq_orderDetailId.Nextval, 1000003, 1000001, 3, 12.50);
insert into orderDetail values(seq_orderDetailId.Nextval, 1000002, 1000003, 1, 188.50);
insert into orderDetail values(seq_orderDetailId.Nextval, 1000004, 1000004, 2, 350);
insert into orderDetail values(seq_orderDetailId.Nextval, 1000004, 1000001, 1, 12.50);

e. 配置 mapper.xml 和 Mapper 接口,本次只配置一个简单的查询 mapper.xml,更多的mapper.xml 配置请参考我前面的 MyBatis blog。

userMapper.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="ssm.mapper.UserMapper">
  <!-- namespace:本 mapper.xml 对应的 Mapper 接口的类路径
	这样在调用接口的时候,MyBatis 会通过 mapper 自动找到要执行的 SQL 语句
  -->
  <!-- 定义SQL 片段,可重复使用 -->
  <sql id="query_user_ByUserId">
  	<!-- 注意:要做不为null 和 ‘‘ 校验 -->
	<if test="value != null and value != ‘‘">
 	  and users.userId = #{value}
 	</if>
  </sql>
  
  <!-- 动态 sql 查询用户信息 -->
  <select id="findUserById" parameterType="int" resultType="user">
  	select * from users
  	<!-- where 可以自动处理第一个 and -->
  	<where>
  	  <include refid="query_user_ByUserId"></include>
 	</where>
  </select>
</mapper>

UserMapper.java 接口

package sam.mapper;

import sam.model.User;

public interface UserMapper {
	//根据用户Id 查询用户
	public User findUserById(int userId) throws Exception;
}

f. MyBatis 的配置基本都完成了,下面写一个测试类 测试一下mybatis 是否好用。右键 UserMapper.java new 一个 Junit Test Case,将 package 修改成 test package。然后下一步。勾选 UserMapper 接口中需要测试的方法。如下:

UserMapperTest.java

package ssm.test;

import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import ssm.mapper.UserMapper;
import ssm.model.User;

public class UserMapperTest {

	private SqlSessionFactory sqlSessionFactory;

	String resource = "mybatis/SqlMapConfig.xml";

	@Before
	public void setUp() throws Exception {
		// 通过输入流读取配置文件
		InputStream inputStream = Resources.getResourceAsStream(resource);

		// 通过SqlSessionFactoryBuilder,获取SqlSessionFactory
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void testFindUserById() {
		SqlSession sqlSession = sqlSessionFactory.openSession();

		UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

		User user = userMapper.findUserById(100101);

		System.out.println(user);

		sqlSession.commit();
		sqlSession.close();
	}
}

运行 Test case,应该可以查询出 User。至此,mybatis 部分算是搞定了。下面整合 spring。

时间: 2024-10-12 12:51:47

MyBatis 和 Springmvc 的整合(二)的相关文章

【SpringMVC学习04】Spring、MyBatis和SpringMVC的整合

前两篇springmvc的文章中都没有和mybatis整合,都是使用静态数据来模拟的,但是springmvc开发不可能不整合mybatis,另外mybatis和spring的整合我之前学习mybatis的时候有写过一篇,但是仅仅是整合mybatis和spring,所以这篇文章我系统的总结一下spring.mybatis和springmvc三个框架的整合(后面学习到maven时,我会再写一篇使用maven整合的文章,这篇没有用到maven). 1. jar包管理 我之前有写过一篇spring.hi

SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合

之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBatis框架的学习(六)——MyBatis整合Spring.本文我再来讲SpringMVC和MyBatis整合开发的方法,这样的话,Spring.MyBatis和SpringMVC三大框架的整合开发我们就学会了.这里我使用的Spring是Spring4.1.3这个版本(SpringMVC自然也是这个版本),MyBatis是MyBatis3.2.7这个版本. 为了更好的学习SpringMVC和MyBatis整合开发的方法

基于Maven的Mybatis+spring+springMVC框架整合(mapper代理方式)

首先看看整个Demo的骨架: 首先这个demo整合是基于maven的,maven下载配置我就不说了,网上也有很多大神配置的案例,鼠标右键点击new选择maven project.在选择select an Archetype的时候选择webapp,通过myeclipse新建的maven项目只有一个src/main/resources包,所以还要自己手动新建几个src folder.详情请参照上图,接着就是要在pom.xml中添加dependencies,就是所需要的jar包. <propertie

SpringMvc基础知识(二) springmvc和mybatis整合

1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao层 mybatis和spring整合,通过spring管理mapper接口. 使用mapper的扫描器自动扫描mapper接口在spring中进行注册. 第二步:整合service层 通过spring管理 service接口. 使用配置方式将service接口配置在spring配置文件中. 实现事务

SSM--Spring(4.3.2.RELEASE) + SpringMVC(4.3.2.RELEASE) + MyBatis(3.4.1) 整合

. 1. 开发环境搭建 参考博文:Eclipse4.6(Neon) + Tomcat8 + MAVEN3.3.9 + SVN项目完整环境搭建 2. Maven Web项目创建 2.1. 2.2. 2.3. 2.4. 2.5. 完成后目录结构图 2.5 (可选)设置: 选中项目 单击右键设置; 项目编码换成UTF-8:Properties -> Resource -> Text file encoding 设置默认的JRE:Properties -> Java Build Path -&g

spring mvc+mybatis整合 (二)

转:http://lifeneveralone.diandian.com/post/2012-11-02/40042292065 本文介绍使用spring mvc结合Mybatis搭建一个应用程序框架. demo源码下载:springMVC-Mybatis 1.准备工作: spring的jar包: spring-beans-3.1.0.RELEASE.jar spring-core-3.1.0.RELEASE.jar spring-web-3.1.0.RELEASE.jar spring-web

myBatis+SpringMVC+Maven整合

一.先创建表结构 二.使用generator通过表结构自动生成model和dao.mapper 使用步骤: 1.解压generator.rar文件 2.文件中的generator.xml文件需要进行修改,修改里面的文件生成地址 3.打开生成语句.txt文件,复制出里面的内容,回到该文件所在目录下,右键-->打开命令窗口,将该命令执行,将会在相应的目录下生成文件Model,Dao.Mapper 生成的文件包括mapper.xml中生成的封装语句,已办是不够用的,需要后期添加和修改 注意:文件路径不

(三)springmvc+mybatis+dubbo分布式架构 整合 - maven模块规划

上一篇我们介绍<springmvc+mybatis+zookeeper分布式架构 整合 - 平台功能导图>,从今天开始,我们针对于每一个独立的系统做详细的构建,顺便会把整个构建的过程全部记录下来,方便更多的开发者. 提醒: 在构建dubbo分布式平台之前,必须掌握好maven的相关技能,整个构建过程都是使用maven技术.在构建的过程中解决maven问题的时间往往比编码的时间还多,但这不能阻止我们对<构建dubbo分布式平台>之路,没有掌握好maven技能的开发者,可以在网站找一些

Spring+Spring MVC+MyBatis实现SSM框架整合详细教程【转】

关于Spring+SpringMVC+Mybatis 整合,见还有不少初学者一头雾水,于是写篇教程,初学者按部就班的来一次,可能就会少走不少弯路了. 一:框架介绍(啰嗦两句,可自行度娘) 1.1:Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来.它是为了解决企业应用开发的复杂性而创建的