- 浏览: 1824517 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
It-eyetor:
请问楼主访问controller中的@RequestMappi ...
dwr学习之 二、dwr功能演示 -
JackingNo1:
...
Android开发学习 之 五、基本界面控件-1文本控件 -
GGGGeek:
好详细,写的真全面
MyBatis学习 之 三、动态SQL语句 -
saybar:
哪里有源代码啊,?能否发一份?还有就是 ClassEntity ...
MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql -
liangzulin:
classentity是啥?哪个包的类啊?这教程并不完整啊!
MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
一、MyBatis简介与配置MyBatis+Spring+MySql
MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
MyBatis学习 之 二、SQL语句映射文件(1)resultMap
MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
1.1MyBatis简介
MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。
需要使用的Jar包:mybatis-3.0.2.jar(mybatis核心包)。mybatis-spring-1.0.0.jar(与Spring结合包)。
下载地址:
http://ibatis.apache.org/tools/ibator
http://code.google.com/p/mybatis/
1.2MyBatis+Spring+MySql简单配置
1.2.1搭建Spring环境
1,建立maven的web项目;
2,加入Spring框架、配置文件;
3,在pom.xml中加入所需要的jar包(spring框架的、mybatis、mybatis-spring、junit等);
4,更改web.xml和spring的配置文件;
5,添加一个jsp页面和对应的Controller;
6,测试。
可参照:http://limingnihao.iteye.com/blog/830409。使用Eclipse的Maven构建SpringMVC项目
1.2.2建立MySql数据库
建立一个学生选课管理数据库。
表:学生表、班级表、教师表、课程表、学生选课表。
逻辑关系:每个学生有一个班级;每个班级对应一个班主任教师;每个教师只能当一个班的班主任;
使用下面的sql进行建数据库,先建立学生表,插入数据(2条以上)。
更多sql请下载项目源文件,在resource/sql中。
/* 建立数据库 */ CREATE DATABASE STUDENT_MANAGER; USE STUDENT_MANAGER; /***** 建立student表 *****/ CREATE TABLE STUDENT_TBL ( STUDENT_ID VARCHAR(255) PRIMARY KEY, STUDENT_NAME VARCHAR(10) NOT NULL, STUDENT_SEX VARCHAR(10), STUDENT_BIRTHDAY DATE, CLASS_ID VARCHAR(255) ); /*插入学生数据*/ INSERT INTO STUDENT_TBL (STUDENT_ID, STUDENT_NAME, STUDENT_SEX, STUDENT_BIRTHDAY, CLASS_ID) VALUES (123456, '某某某', '女', '1980-08-01', 121546 )
创建连接MySql使用的配置文件mysql.properties。
jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/student_manager?user=root&password=limingnihao&useUnicode=true&characterEncoding=UTF-8
1.2.3搭建MyBatis环境
顺序随便,现在的顺序是因为可以尽量的少的修改写好的文件。
1.2.3.1创建实体类: StudentEntity
public class StudentEntity implements Serializable { private static final long serialVersionUID = 3096154202413606831L; private ClassEntity classEntity; private Date studentBirthday; private String studentID; private String studentName; private String studentSex; public ClassEntity getClassEntity() { return classEntity; } public Date getStudentBirthday() { return studentBirthday; } public String getStudentID() { return studentID; } public String getStudentName() { return studentName; } public String getStudentSex() { return studentSex; } public void setClassEntity(ClassEntity classEntity) { this.classEntity = classEntity; } public void setStudentBirthday(Date studentBirthday) { this.studentBirthday = studentBirthday; } public void setStudentID(String studentID) { this.studentID = studentID; } public void setStudentName(String studentName) { this.studentName = studentName; } public void setStudentSex(String studentSex) { this.studentSex = studentSex; } }
1.2.3.2创建数据访问接口
Student类对应的dao接口:StudentMapper。
public interface StudentMapper { public StudentEntity getStudent(String studentID); public StudentEntity getStudentAndClass(String studentID); public List<StudentEntity> getStudentAll(); public void insertStudent(StudentEntity entity); public void deleteStudent(StudentEntity entity); public void updateStudent(StudentEntity entity); }
1.2.3.3创建SQL映射语句文件
Student类的sql语句文件StudentMapper.xml
resultMap标签:表字段与属性的映射。
Select标签:查询sql。
<?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.manager.data.StudentMapper"> <resultMap type="StudentEntity" id="studentResultMap"> <id property="studentID" column="STUDENT_ID"/> <result property="studentName" column="STUDENT_NAME"/> <result property="studentSex" column="STUDENT_SEX"/> <result property="studentBirthday" column="STUDENT_BIRTHDAY"/> </resultMap> <!-- 查询学生,根据id --> <select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ST WHERE ST.STUDENT_ID = #{studentID} ]]> </select> <!-- 查询学生列表 --> <select id="getStudentAll" resultType="com.manager.data.model.StudentEntity" resultMap="studentResultMap"> <![CDATA[ SELECT * from STUDENT_TBL ]]> </select> </mapper>
1.2.3.4创建MyBatis的mapper配置文件
在src/main/resource中创建MyBatis配置文件:mybatis-config.xml。
typeAliases标签:给类起一个别名。com.manager.data.model.StudentEntity类,可以使用StudentEntity代替。
Mappers标签:加载MyBatis中实体类的SQL映射语句文件。
<?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> <typeAliases> <typeAlias alias="StudentEntity" type="com.manager.data.model.StudentEntity"/> </typeAliases> <mappers> <mapper resource="com/manager/data/maps/StudentMapper.xml" /> </mappers> </configuration>
1.2.3.5修改Spring 的配置文件
主要是添加SqlSession的制作工厂类的bean:SqlSessionFactoryBean,(在mybatis.spring包中)。需要指定配置文件位置和dataSource。
和数据访问接口对应的实现bean。通过MapperFactoryBean创建出来。需要执行接口类全称和SqlSession工厂bean的引用。
<!-- 导入属性配置文件 --> <context:property-placeholder location="classpath:mysql.properties" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property name="dataSource" ref="dataSource" /> </bean> <!— mapper bean --> <bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean"> <property name="mapperInterface" value="com.manager.data.StudentMapper" /> <property name="sqlSessionFactory" ref="sqlSessionFactory" /> </bean>
也可以不定义mapper的bean,使用注解:
将StudentMapper加入注解
@Repository @Transactional public interface StudentMapper { }
对应的需要在dispatcher-servlet.xml中加入扫描:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="annotationClass" value="org.springframework.stereotype.Repository"/> <property name="basePackage" value="com.liming.manager"/> <property name="sqlSessionFactory" ref="sqlSessionFactory"/> </bean>
1.2.4测试StudentMapper
使用SpringMVC测试,创建一个TestController,配置tomcat,访问index.do页面进行测试:
@Controller public class TestController { @Autowired private StudentMapper studentMapper; @RequestMapping(value = "index.do") public void indexPage() { StudentEntity entity = studentMapper.getStudent("10000013"); System.out.println("name:" + entity.getStudentName()); } }
使用Junit测试:
使用Junit测试: Java代码 @RunWith(value = SpringJUnit4ClassRunner.class) @ContextConfiguration(value = "test-servlet.xml") public class StudentMapperTest { @Autowired private ClassMapper classMapper; @Autowired private StudentMapper studentMapper; @Transactional public void getStudentTest(){ StudentEntity entity = studentMapper.getStudent("10000013"); System.out.println("" + entity.getStudentID() + entity.getStudentName()); List<StudentEntity> studentList = studentMapper.getStudentAll(); for( StudentEntity entityTemp : studentList){ System.out.println(entityTemp.getStudentName()); } } }
MyBatis学习 之 一、MyBatis简介与配置MyBatis+Spring+MySql
MyBatis学习 之 二、SQL语句映射文件(1)resultMap
MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
评论
这教程并不完整啊!
<bean id="studentMapper" class="org.mybatis.spring.MapperFactoryBean">
<property name="mapperInterface" value="com.manager.data.StudentMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
MapperFactoryBean的路径写错了,应该是org.mybatis.spring.mapper.MapperFactoryBean
你说的两次,第二次指的是在junit里边吧。在junit里面加@Transactional可以使在测试增删改后进行数据回滚,保证数据和测试之前的一样,不加也没问题。
@Repository
@Transactional
public interface StudentMapper {
}
个人觉得这里没必要加事务,在service层去加事务控制
你说的两次,第二次指的是在junit里边吧。在junit里面加@Transactional可以使在测试增删改后进行数据回滚,保证数据和测试之前的一样,不加也没问题。
<?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/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-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.myproject" />
<!-- 定义受环境影响易变的变量 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
<property name="ignoreResourceNotFound" value="true" />
<property name="locations">
<list>
<!-- 本地开发环境配置 -->
<value>classpath:jdbc.local.properties</value>
<value>classpath:sys_config.properties</value>
</list>
</property>
</bean>
<!-- 数据源配置,使用应用内的DBCP数据库连接池 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" lazy-init="false">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url_mex}"/>
<property name="username" value="${jdbc.username_mex}"/>
<property name="password" value="${jdbc.password_mex}"/>
<!-- Connection Pooling Info -->
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="timeBetweenEvictionRunsMillis" value="3600000" />
<property name="minEvictableIdleTimeMillis" value="3600000" />
<property name="defaultAutoCommit" value="${jdbc.defaultAutoCommit}" />
</bean>
<!-- 事务管理器配置,单数据源事务 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:ibatis-config.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- mapper bean -->
<bean id="StudentMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="com.myproject.report.dao.StudentMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean name="stringHttpMessageConverter"
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</beans>
启动后报错:
Related cause: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'StudentMapper' defined in ServletContext resource [/WEB-INF/spring/appServlet/app-config.xml]: Cannot resolve reference to bean 'sqlSessionFactory' while setting bean property 'sqlSessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in ServletContext resource [/WEB-INF/spring/appServlet/app-config.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.apache.ibatis.builder.xml.XMLConfigBuilder.<init>(Ljava/io/InputStream;Ljava/lang/String;Ljava/util/Properties;)V
不知什么原因,请各位予以解答,谢谢!
哦,写错了.....
是"事务怎么处理"
使用Spring的@Transactional注解,一般写在Service层的接口方法上。
哦,写错了.....
是"事务怎么处理"
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
代码:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation">
<value>classpath:mybatis-config.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
遇到相同的问题,调试了一晚上没有找到原因,不知7楼是否已经解决该问题了?若解决了,请不吝赐教!
终于弄明白了,原来是spring版本的问题,MyBatis-Spring只能在spring3.0版本上使用,如果用spring3.0以下版本就会出现该问题,建议将spring升级为3.0或改用ibatis2.0!
官方使用手册里好像有这么一句,但是你的配置文件中同时配置了这两个属性:
<!-- 查询学生,根据id -->
13. <select id="getStudent" parameterType="String" resultType="StudentEntity" resultMap="studentResultMap">
请楼主解释一下?
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.reflect.MalformedParameterizedTypeException
代码:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation">
<value>classpath:mybatis-config.xml</value>
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
遇到相同的问题,调试了一晚上没有找到原因,不知7楼是否已经解决该问题了?若解决了,请不吝赐教!
在SQL映射语句文件中,使用的实体类(Java类型声明时),如果没有定义这个<typeAliases>,那么我们用到实体类都需要写带包名的全称:com.manager.data.model.StudentEntity。而使用typeAliases就给这个类起了一个名字,也就是简称:StudentEntity,所以以后在使用这个实体类的时候,我们只需要写StudentEntity,而不用写带包名的全称。
发表评论
-
MyBatis学习 之 四、MyBatis配置文件
2011-05-27 09:55 191344四、MyBatis主配置文件 MyBati ... -
MyBatis学习 之 三、动态SQL语句
2010-10-12 10:57 350213三、动态SQL语句 MyBatis学习 之 一、 ... -
MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存
2010-10-11 22:49 114150二、SQL语句映射文件(2)增删改查、参数、缓存 ... -
MyBatis学习 之 二、SQL语句映射文件(1)resultMap
2010-10-11 22:25 133798二、SQL语句映射文件(1)resultMap ...
相关推荐
Maven+Spring+Spring MVC+MyBatis+MySQL,搭建SSM框架环境
标题中的"全注解 spring boot +spring security + mybatis+druid+thymeleaf+mysql+bootstrap"是一个集成开发环境的配置,涉及到的主要技术有Spring Boot、Spring Security、MyBatis、Druid、Thymeleaf、MySQL以及...
Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统。 Spring+SpringMVC+MyBatis+Shiro+MySQL+Redis+Maven+EasyUI+Bootstrap实现的通用权限管理系统 Spring+SpringMVC+...
"maven+spring MVC+Mybatis+jetty+mysql" 的组合是常见的开发栈,它涵盖了项目管理、前端控制器、持久层操作、应用服务器以及数据库管理等多个层面。下面将详细介绍这些关键技术及其在实际应用中的作用。 1. Maven...
"SpringMvc+Spring+Mybatis+Maven+注解方式"是一个经典的Java后端技术栈,它整合了四个关键组件,为开发人员提供了强大的工具和框架支持。下面将详细讲解这四个组件及其整合方式。 1. **Spring Framework**: ...
基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统 基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统 基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统 基于SSM(springmvc+spring+mybatis)+...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统源码.zip 基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统源码.zip 基于SSM(springmvc+spring+mybatis)+Mysql图书管理系统源码.zip 基于SSM...
在IT行业中,构建一个高效的Java应用开发环境是至关重要的,而"Maven+Spring+MyBatis+MySQL+JUnit"的组合则是一个常见的选择。这个框架集合涵盖了项目构建、依赖管理、业务逻辑处理、数据库交互以及单元测试等多个...
全注解 spring boot +spring security + mybatis+druid+thymeleaf+jsp+mysql+bootstrap 支持thymeleaf和jsp并存 全注解 spring boot spring security thymeleaf+jsp同时使用 mybatis druid mysql bootstrap 访问 ...
本项目框架“Spring+Mybatis+Mysql”就是一种常见的、高效的Java Web开发组合,适用于初学者和专业人士进行学习和参考。下面将详细讲解这个框架的核心组成部分及其作用。 1. **Spring框架**:Spring是一个开源的...
标题 "spring+mybatis+spark+mysql" 描述了一个整合了四大关键技术的项目:Spring、MyBatis、Spark以及MySQL。这个项目旨在提供一个学习和实践大数据处理与微服务架构的平台,通过将这些组件集成,可以实现高效的...
本项目框架“maven+springMVC+mybatis+velocity+mysql+junit”提供了一种高效、灵活且可维护的解决方案。以下将详细讲解这些组件及其作用。 1. Maven: Maven是一个项目管理工具,用于构建、依赖管理和项目信息...
3. Mybatis:Mybatis是一个轻量级的持久层框架,它允许开发者将SQL语句直接写在XML配置文件或Java类中,实现了SQL与Java代码的紧密集成。Mybatis通过动态SQL支持,可以方便地进行复杂的数据库操作,同时避免了传统的...
本项目——"spring+spring mvc+mybatis+mysql+dubbo整合开发任务流程后台管理系统"提供了一个完整的解决方案,涵盖了前端到后端的关键技术栈。下面我们将深入探讨这些技术及其在系统中的作用。 **Spring框架**:...
标题 "Spring+Mybatis+mysql简单的Student增删改查" 提到的是一个使用Spring MVC、MyBatis和MySQL数据库实现的基础Web应用示例,主要涵盖了数据操作的核心功能:增(添加)、删(删除)、改(修改)和查(查询)。...
数据库采用MySQL进行数据存储,使用MyBatis进行数据访问。 权限控制模块设计包括用户、角色和权限三个主要模块。用户模块用于管理用户信息,角色模块用于管理角色信息,权限模块用于管理权限信息。实现对用户访问...
在本项目中,我们主要关注的是SpringBoot 2.7版本与多个技术的深度整合,包括Spring Security、JWT(JSON Web Token)、Redis缓存以及MySQL数据库,并利用MyBatis作为持久层框架。以下是对这些技术及其整合应用的...
SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+MyBatis+Mysql+Layui实现功能完善的原创文学CMS系统 SpringBoot+...