导包
beans.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-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
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">
<!-- 配置数据源 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///mybatis" />
<property name="username" value="root" />
<!-- <property name="password" value="root" /> -->
</bean>
<bean id="sf" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation" value="classpath:sqlMapConfig.xml"/>
<property name="mapperLocations">
<value>classpath:cn/itcast/mybatis/domain/User.xml</value>
</property>
</bean>
<!-- ================================事务相关控制================================================= -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<tx:advice id="userTxAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="find*" read-only="true" />
<tx:method name="get*" read-only="true" />
<tx:method name="select*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="pc" expression="execution(* cn.itcast.mybatis.service.*.*(..))" />
<!--把事务控制在Service层-->
<aop:advisor pointcut-ref="pc" advice-ref="userTxAdvice" />
</aop:config>
<bean id="userDao" class="cn.itcast.mybatis.dao.UserDaoImpl">
<property name="sqlSessionFactory" ref="sf"></property>
</bean>
<bean id="userService" class="cn.itcast.mybatis.service.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
</bean>
</beans>
sqlMapconfig.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>
<typeAliases>
<typeAlias type="cn.itcast.mybatis.domain.User" alias="User"/>
</typeAliases>
</configuration>
public interface IUserDao {
public User findUserById(String id);
public List<User> findAllUser();
public List<User> findUserByCondition(User u);
public int deleteUserById(String id);
public int saveUser(User u);
public int updateUserById(User u);
public int updateUser(User u);
}
public class UserDaoImpl extends SqlSessionDaoSupport implements IUserDao {
public User findUserById(String id) {
return (User) this.getSqlSession().selectOne("cn.itcast.mybatis.domain.User.selectUserById", id);
}
public int deleteUserById(String id) {
int i = this.getSqlSession().delete("cn.itcast.mybatis.domain.User.deleteUserById", id);
return i;
}
public List<User> findAllUser() {
return this.getSqlSession().selectList("cn.itcast.mybatis.domain.User.selectAllUsers");
}
public List<User> findUserByCondition(User u) {
return this.getSqlSession().selectList("cn.itcast.mybatis.domain.User.selectUserByCondition", u);
}
public int saveUser(User u) {
int i = this.getSqlSession().insert("cn.itcast.mybatis.domain.User.insertUser", u);
return i;
}
public int updateUserById(User u) {
int i = this.getSqlSession().update("cn.itcast.mybatis.domain.User.updateUserById", u);
return i;
}
public int updateUser(User u) {
int i = this.getSqlSession().update("cn.itcast.mybatis.domain.User.updateUserByCondition", u);
return i;
}
}
public class User {
private String id;
private String userName;
private String address;
public String getId() {
System.out.println("正在通过getId方法获取id的值:" + id);
return id;
}
public void setId(String id) {
System.out.println("正在通过setId方法注入id的值:" + id);
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
System.out.println("正在通过setAddress方法注入address的值:" + address);
this.address = address;
}
@Override
public String toString() {
return "{id:" + id + ",name:" + userName + ",address:" + address + "}";
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
System.out.println("正在通过setUserName方法注入userName的值:" + userName);
this.userName = userName;
}
}
User.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="cn.itcast.mybatis.domain.User">
<resultMap type="User" id="userMap">
<id column="id" property="id"/>
<result column="name" property="userName"/>
<result column="address" property="address"/>
</resultMap>
<sql id="mysql">
id,name,address
</sql>
<!-- 根据id查询User -->
<!-- id:当前sql语句的唯一标示 parameterType:参数类型 resultType:结果类型(返回值类型)-->
<select id="selectUserById" parameterType="string" resultMap="userMap">
select <include refid="mysql"/> from user where id = #{userid}
</select>
<!-- 查询所有User -->
<select id="selectAllUsers" resultType="User">
select id,name as userName ,address from user
</select>
<!-- 根据id查询User,返回值为:Map -->
<select id="selectUserByIdForMap" parameterType="string" resultType="hashmap">
select id,name,address from user where id = #{userid}
</select>
<!-- 动态sql -->
<select id="selectUserByCondition" parameterType="User" resultType="User">
select id,name as userName ,address from user where 1=1
<if test="id != null">
and id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{userName}
</if>
<if test="address != null">
and address = #{address}
</if>
</select>
<!-- 动态sql -->
<select id="selectUserByCondition2" parameterType="User" resultType="User">
select id,name as userName ,address from user
<where>
<if test="id != null">
id = #{id}
</if>
<!-- userName指的是实体的属性 -->
<if test="userName != null">
and name = #{userName}
</if>
<if test="address != null">
and address = #{address}
</if>
</where>
</select>
<!-- 插入User -->
<insert id="insertUser" parameterType="User">
insert into user (id,name,address) values (#{id},#{userName},#{address});
</insert>
<!-- 插入User 参数为hashmap-->
<insert id="insertUserForMap" parameterType="hashmap">
insert into user (id,name,address) values (#{id},#{name},#{address});
</insert>
<!-- 根据id删除User -->
<delete id="deleteUserById" parameterType="string">
delete from user where id = #{id}
</delete>
<!-- 根据id更新User -->
<update id="updateUserById" parameterType="User">
update user set name = #{userName},address = #{address} where id = #{id}
</update>
<!-- 动态更新user -->
<update id="updateUserByCondition" parameterType="User">
update user
<set>
<if test="userName != null">
name = #{userName},
</if>
<if test="address != null">
address = #{address}
</if>
</set>
where id = #{id}
</update>
<!-- 根据id更新User 参数为map-->
<update id="updateUserByIdForMap" parameterType="hashmap">
update user set name = #{userName},address = #{address} where id = #{id}
</update>
</mapper>
public interface IUserService {
public User findUserById(String id);
public List<User> findAllUser();
public List<User> findUserByCondition(User u);
public int deleteUserById(String id);
public int saveUser(User u);
public int updateUserById(User u);
public int updateUser(User u);
}
public class UserServiceImpl implements IUserService {
private IUserDao userDao;
public int deleteUserById(String id) {
int i = userDao.deleteUserById(id);
//int c = 1 / 0;
return i;
}
public List<User> findAllUser() {
return userDao.findAllUser();
}
public List<User> findUserByCondition(User u) {
return userDao.findUserByCondition(u);
}
public User findUserById(String id) {
return userDao.findUserById(id);
}
public int saveUser(User u) {
return userDao.saveUser(u);
}
public int updateUser(User u) {
return userDao.updateUser(u);
}
public int updateUserById(User u) {
return userDao.updateUserById(u);
}
public void setUserDao(IUserDao userDao) {
this.userDao = userDao;
}
}
Test
public class MyBatisTest {
@Test
public void test1(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User u = userDao.findUserById("0003");
System.out.println(u);
}
@Test
public void test2(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
List<User> users = userDao.findAllUser();
for(User u: users){
System.out.println(u);
}
}
@Test
public void test3(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0002");
user.setUserName("lisi");
user.setAddress("beijing");
List<User> users = userDao.findUserByCondition(user);
for(User u: users){
System.out.println(u);
}
}
@Test
public void test4(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
int i = userDao.deleteUserById("0002");
System.out.println(i);
}
@Test
public void test5(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0002");
user.setUserName("lisi");
user.setAddress("beijing");
int i = userDao.saveUser(user);
System.out.println(i);
}
@Test
public void test6(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0003");
user.setUserName("zhangsan");
//user.setAddress("nanjing");
int i = userDao.updateUserById(user);
System.out.println(i);
}
@Test
public void test7(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserDao userDao = (IUserDao) ctx.getBean("userDao");
User user = new User();
user.setId("0004");
//user.setUserName("jack");
//user.setAddress("beijing");
int i = userDao.updateUser(user);
System.out.println(i);
}
@Test
public void test8(){
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
IUserService userService = (IUserService) ctx.getBean("userService");
int i = userService.deleteUserById("0003");
System.out.println(i);
}
}