1、表(這裏用mysql,數據庫名爲yiibai) java
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`);
2、表相應的實體類User.java(pojo)以及mybatis表map配置文件User.xmlmysql
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配置更強大、但註解方式更直觀便於理解。web
<?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>
3、Dao接口spring
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方式來實現sql
4、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的方法來完成的。apache
5、配置文件springboot
mybatis配置文件cfg.xml和spring bean的配置文件Userbean.xml都放在com.yiibai.mybatis下:session
<?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和接口方式都加載了。mybatis
也能夠在主類中調用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>
6、主類
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); } }
7、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(); } } }