mybatis和spring的整个经过
准备步骤如下
- 创建数据库表
- 创建数据库中表的模型对象
- 创建操作数据库表的接口
-
* [创建操作数据库的映射xml文件](#41)
- 写spring的配置文件详解
-
创建数据库表
ddl如下
<pre lang="sql">
CREATE TABLE `user` (
`state` INT(11) DEFAULT NULL,
`name` CHAR(20) DEFAULT NULL,
`pwd` CHAR(100) DEFAULT NULL,
`id` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
)
</pre>
**创建数据库中表的模型对象**
User类如下
<pre lang="java">
//User.java
public class User {
private int id;
private String pwd;
private String name;
private int state;
//setter & getter
}
</pre>
**创建操作数据库表的接口**
UserDao类如下
<pre lang="java">
//UserDao.java
public interface UserDao {
//增加用户
void addUser(User u);
//删除用户
void deleteUser(User u);
//更新用户信息
void updateUser(User u);
//的到用户信息
User getUserById(int id);
//得到用户数目
int getUserNum();
}
</pre>
**对数据库操作的两种方式**
mybatis对数据库进行操作肯定是需要sql语句的,那么sql语句要放在哪儿呢?现在有2种方法如下
**一、创建操作数据库的映射xml文件**
映射文件的xml代码如下
<pre lang="xml">
//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="com.model.dao.UserDao">
<select id="getUserById" resultType="User" parameterType="int" >
SELECT
*
FROM user
WHERE
id= #{id}
</select>
<select id="getUserNum" resultType="int" >
SELECT
COUNT(*)
FROM user
</select>
<insert id="addUser" parameterType="User">
INSERT
INTO user(name,pwd,state)
VALUES(#{name},#{pwd},#{state})
</insert>
<update id="updateUser" parameterType="User">
UPDATE user
SET
name=#{name}
WHERE
id=#{id}
</update>
<update id="deleteUser" parameterType="User">
UPDATE user
SET
state=#{state}
WHERE
id=#{id}
</update>
</mapper>
</pre>
**二、直接在接口里面写入sql语句**
在我们第三步时候创建的接口是表示我们对这个模型的数据库可以进行哪一些的操作,同样,我们可以再这里使用标注的方式写出sql,方面查看,这样,接口就变成下面那样了
<pre lang="java">
//UserDao.java
package com.model.dao;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.model.User;
public interface UserDao {
//增加用户
@Insert(" INSERT INTO user(name,pwd,state) VALUES(#{name},#{pwd},#{state})")
void addUser(User u);
//删除用户
@Update(" UPDATE user SET state=#{state} WHERE id=#{id}")
void deleteUser(User u);
//更新用户信息
@Update(" UPDATE user SET name=#{name} WHERE id=#{id}")
void updateUser(User u);
//的到用户信息
@Select(" SELECT * FROM user WHERE id= #{id}")
User getUserById(int id);
//得到用户数目
@Select(" SELECT COUNT(*) FROM user")
int getUserNum();
}
</pre>
**写spring的配置文件详解**
配置文件如下
<pre lang="xml">
//spring-config-dao.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<!-- 这个是一个数据源,专门连接数据库的 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="url" value="jdbc:mysql://localhost:3306/springtestdb"></property>
<property name="username" value="root"></property>
<property name="password" value="123456"></property>
</bean>
<!-- 这下面都是mybatis的配置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="com.model"></property>
<!-- 备注:这里要是在接口里面写了sql语句,那么这一样就可以注释掉,这一行的意思是寻找所有的sql映射文件
<property name="mapperLocations" value="classpath:model/*Mapper.xml"></property>
-->
</bean>
<!-- 这个是创建一个bean,他的名字叫做userDao,也可以使用基于包的方式来自动装在 -->
<bean id="userDao" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface"
value="com.model.dao.UserDao" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
</beans>
</pre>
**下面展示一下对这个的单元测试代码**
<pre lang="java">
//UserDaoTest.java
package com.model;
import junit.framework.TestCase;
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 com.model.dao.UserDao;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:spring-config-dao.xml")
public class UserDaoTest extends TestCase{
@Autowired
private UserDao userDao;
@Test
public void getNumTest(){
System.out.println(userDao.getUserNum());
}
}
</pre>
**期间遇到的问题**
1.对于配置文件找不到的问题,主要是classpath明白不了,参考了下面的这篇文章,大体明白了,向大家推荐下
http://my.oschina.net/yjx/blog/6253
2.期间出现了一个异常
<pre lang="java">
org.apache.ibatis.binding.BindingException
</pre>
查了一下主要是由于映射文件的namespace和映射的接口不一致,我参考下面的文章
mybatis绑定错误