Spring Mybatis实例SqlSessionDaoSupport混用xml配置和注解

一、表(这里用mysql,数据库名为yiibai) 

CREATE TABLE `user` (
  `id` int(10) UNSIGNED NOT NULL,
  `name` varchar(64) NOT NULL DEFAULT '',
  `dept` varchar(254) NOT NULL DEFAULT '',
  `website` varchar(254) DEFAULT '',
  `phone` varchar(16) NOT NULL DEFAULT '',
  `birthday` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Indexes for table `user`
--
ALTER TABLE `user`
  ADD PRIMARY KEY (`id`);

二、表相应的实体类User.java(pojo)以及mybatis表map配置文件User.xml

package com.yiibai.mybatis.models;

import java.util.Date;

public class User {
	
    public User(int id, String name, String dept, String phone, String website, Date birthday) {
		super();
		this.id = id;
		this.name = name;
		this.dept = dept;
		this.phone = phone;
		this.website = website;
		this.birthday = birthday;
	}
	public User() {
		super();
		// TODO 自动生成的构造函数存根
	}

	private int id;
    private String name;
    private String dept;
    private String phone;
    private String website;
    private Date birthday;

    public String getWebsite() {
        return website;
    }
    public void setWebsite(String website) {
        this.website = website;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getDept() {
        return dept;
    }
    public void setDept(String dept) {
        this.dept = dept;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
	public Date getBirthday() {
		return birthday;
	}
	public void setBirthday(Date birthday) {
		this.birthday = birthday;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", dept=" + dept + ", phone=" + phone + ", website=" + website
				+ ", birthday=" + birthday + "]";
	}

}

配置文件User.xml和User类一样放在包com.yiibai.mybatis.models下,这里只是为了解释和注解方法混用就配置了 GetUserByID一个方法,实际应用可能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.yiibai.mybatis.models.UserMapper">
	<select id="GetUserByID" parameterType="int" resultType="User">
		select * from `user` where id = #{id}
    </select>
</mapper>

三、Dao接口

package com.yiibai.mybatis.dao;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import com.yiibai.mybatis.models.User;

public interface IUser {
    @Select("select * from user where id= #{id}")
    public User getUserByID(int id);
    @Insert("insert into user(id, name, dept,phone,website,birthday) values(#{id}, #{name}, #{dept},#{phone}, #{website}, #{birthday})")
    public int insertUser(User user);
    @Delete("delete from user where id=#{id}")
    public int deleteUserById(int id);
    @Update("update user set name=#{name},dept=#{dept},phone=#{phone},website=#{website},birthday=#{birthday} where id=#{id}")
    public int updateUser(User user);
    @Select("select * from user")
    public List<User> getAllUser();
    public User oneByID(int id);

}

这里唯一没有用注解的方法oneByID用XML方式来实现

四、Dao实现类UserDaoImpl继承SqlSessionDaoSupport并实现了刚才的IUser接口

package com.yiibai.mybatis.daoimpl;

import java.util.List;

import org.mybatis.spring.support.SqlSessionDaoSupport;

import com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;

public class UserDaoImpl extends SqlSessionDaoSupport implements IUser {

	@Override
	public User getUserByID(int id) {
		// TODO 自动生成的方法存根
		return 	this.getSqlSession().getMapper(IUser.class).getUserByID(id);
	}

	@Override
	public int insertUser(User user) {
		// TODO 自动生成的方法存根
		return this.getSqlSession().getMapper(IUser.class).insertUser(user);
	}

	@Override
	public int deleteUserById(int id) {
		// TODO 自动生成的方法存根
		return this.getSqlSession().getMapper(IUser.class).deleteUserById(id);
	}

	@Override
	public int updateUser(User user) {
		// TODO 自动生成的方法存根
		return this.getSqlSession().getMapper(IUser.class).updateUser(user);
	}

	@Override
	public List<User> getAllUser() {
		// TODO 自动生成的方法存根
		return this.getSqlSession().getMapper(IUser.class).getAllUser();
	}

	@Override
	public User oneByID(int id) {
		// TODO 自动生成的方法存根
		return this.getSqlSession().selectOne("com.yiibai.mybatis.models.UserMapper.GetUserByID", id);
	}

}

这里可以看出oneByID方法是通过调用User.xml名字空间com.yiibai.mybatis.models.UserMapper下面GetUserByID的方法来完成的。

五、配置文件

mybatis配置文件cfg.xml和spring bean的配置文件Userbean.xml都放在com.yiibai.mybatis下:

<?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="User" type="com.yiibai.mybatis.models.User" />
	</typeAliases>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver" />
				<property name="url" value="jdbc:mysql://127.0.0.1:3306/yiibai?useSSL=false" />
				<property name="username" value="y-user" />
				<property name="password" value="y-passwd" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<!-- XML的方式 注册映射配置文件-->
		<mapper resource="com/yiibai/mybatis/models/User.xml" />	
     	<!--接口的方式  注册接口-->
     	<mapper class="com.yiibai.mybatis.dao.IUser"/>
 	</mappers>
	
</configuration>

可以看出mapper中把XML和接口方式都加载了。

也可以在主类中调用this.sqlSessionFactory.getConfiguration().addMapper(IUser.class)来注册

<?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: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.xsd
          	http://www.springframework.org/schema/tx
        	http://www.springframework.org/schema/tx/spring-tx.xsd
        	http://www.springframework.org/schema/aop
       		http://www.springframework.org/schema/aop/spring-aop.xsd
        	http://www.springframework.org/schema/jee
        	http://www.springframework.org/schema/jee/spring-jee.xsd
        	http://www.springframework.org/schema/context
        	http://www.springframework.org/schema/context/spring-context.xsd
        	http://www.springframework.org/schema/util
        	http://www.springframework.org/schema/util/spring-util.xsd
        	http://www.springframework.org/schema/tool
        	http://www.springframework.org/schema/tool/spring-tool.xsd">

   <bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />       
    <property name="url" value="jdbc:mysql://localhost:3306/yiibai?useSSL=false" />       
    <property name="username" value="your-name" />       
    <property name="password" value="your-passwd" />       
   </bean>
   
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="dataSource1" />
		<property name="configLocation"
			value="classpath:com/yiibai/mybatis/cfg.xml" />
	</bean>
	<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>
	<bean id="MybatisUserDao" class="com.yiibai.mybatis.daoimpl.UserDaoImpl">
		<property name="sqlSessionTemplate" ref="sqlSession" />
	</bean>

</beans>

六、主类

package com.yiibai.mybatis;

import java.sql.Date;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.User;

public class UserBeanTest {

	private static ApplicationContext ctx;

	public static void main(String[] args) throws Exception {
		ctx = new ClassPathXmlApplicationContext("com/yiibai/mybatis/Userbean.xml");

		IUser iuser = (IUser) ctx.getBean("MybatisUserDao");

		User user = new User(2, "yiibai2", "Tech", "13800009900", "http://www.zjptcc.com", Date.valueOf("1977-08-09"));
		iuser.insertUser(user);
		System.out.println(iuser.getUserByID(2));
		System.out.println(iuser.oneByID(2));

		List<User> users = iuser.getAllUser();
		for (User u : users) {
			System.out.println("user ID " + u.getId());
			System.out.println("名字: " + u.getName());
			System.out.println("所属部门" + u.getDept());
			System.out.println("电话" + u.getPhone());
			System.out.println("网址" + u.getWebsite());
			System.out.println("日期" + u.getBirthday());
			System.out.println("----------------------------");
		}

		iuser.deleteUserById(2);

	}

}

七、sping bean不是必须配置的(不配置Userbean.xml),可以在主类中声明一个SqlSessionFactory变量,这时主类可以是这样子:

package com.yiibai.mybatis;

import java.io.Reader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

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 com.yiibai.mybatis.dao.IUser;
import com.yiibai.mybatis.models.*;

/**
 * 
 * @author yiibai
 * @copyright http://www.yiibai.com
 * @date 2015/09/22
 */
public class TestUser {
	private static SqlSessionFactory sqlSessionFactory;
	private static Reader reader;

	static {
		try {
			reader = Resources.getResourceAsReader("com/yiibai/mybatis/cfg.xml");
			sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static SqlSessionFactory getSession() {
		return sqlSessionFactory;
	}

	/**
	 * @param args
	 * @throws ParseException 
	 */
	public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
		SqlSession session = sqlSessionFactory.openSession();
		try {
			User user = (User) session.selectOne(
					 "com.yiibai.mybatis.models.UserMapper.GetUserByID", 1);
			System.out.println(user);
			
			IUser userInterface = session.getMapper(IUser.class);
			user = (User) userInterface.getUserByID(1);
			System.out.println(user);
			
			userInterface.insertUser(new User(2,"依依2","Tech","13800009922","http://www.zjptcc.com", new SimpleDateFormat("yyyy-MM-dd").parse("1973-11-05"))) ;
			List<User> users = userInterface.getAllUser();
			for (User u : users) {
				System.out.println("user ID " + u.getId());
				System.out.println("名字: " + u.getName());
				System.out.println("所属部门" + u.getDept());
				System.out.println("电话" + u.getPhone());
				System.out.println("网址" + u.getWebsite());
				System.out.println("日期" + u.getBirthday());
				System.out.println("----------------------------");
			}
			userInterface.deleteUserById(2);
			session.commit();
		} finally {
			session.close();
		}
	}

}

Spring 的持久化实例

springboot和mybatis结合

猜你喜欢

转载自my.oschina.net/u/2245781/blog/1554379
今日推荐