MYBATIS- 入门实例
来源:互联网 发布:淘宝网钻石展位 编辑:程序博客网 时间:2024/06/08 11:06
mybatis+spring
http://73677ebe.wiz03.com/share/s/1PpTW-2nTkUu2dDZix2UMXBy0outv123rAcl2CDlKN2mR73p
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ilucky.mybatis</groupId> <artifactId>mybatis-util</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>mybatis-util</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.springframework>4.1.1.RELEASE</org.springframework> </properties> <dependencies> <!-- spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-instrument</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-instrument-tomcat</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-oxm</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc-portlet</artifactId> <version>${org.springframework}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${org.springframework}</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- commons --> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.4</version> <scope>provided</scope> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.18</version> </dependency> <!-- log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <!-- bonecp --> <dependency> <groupId>com.jolbox</groupId> <artifactId>bonecp</artifactId> <version>0.8.0.RELEASE</version> </dependency> </dependencies></project>
package com.ilucky.mybatis;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Random;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 org.apache.log4j.Logger;import org.apache.log4j.PropertyConfigurator;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.ilucky.mybatis.model.User;import com.ilucky.mybatis.model.UserType;import com.ilucky.mybatis.service.UserService;import com.ilucky.mybatis.util.IdUtil;/** * v1.0:20161117 * @author IluckySi * @since 20151013 * mybatis基础使用,mybatis+spring集成. */public class MainTest { private static Logger logger = Logger.getLogger(MainTest.class); public static ClassPathXmlApplicationContext context; public static UserService userService; public static void main(String[] args) { // 简单测试. // test(); // 初始化环境. if(!initEnv()) { return; } //获取service bean. userService = (UserService) context.getBean("userService"); // 保存单个对象. // 注意: 如果我们传入到Mapper层的参数是一个对象,mybatis会自动将其转换成Map集合,key=对象字段名称,value=对象字段值. // createUser(); // 保存多个对象. // 注意: 如果我们传入到Mapper层的参数一个是List集合,mybatis会自动将其封装成Map集合,且key="list",value=List集合. // 同时注意: 如果List集合中是对象,则遍历集合时mybatis会自动将对象转换为Map集合,key=对象字段名称,value=对象字段值. // createUserList(); // 修改对象. // 注意: 如果我们传入到Mapper层的参数是一个对象,mybatis会自动将其转换成Map集合,key=对象字段名称,value=对象字段值. // 同时注意: 拼写sql时哪些是条件字段,哪些是需要修改的字段. // modifyUser(); // 删除单个对象. // 注意: 如果我们传入到Mapper层的参数是一个元素,mybatis会自动将其转换为Map集合吗? // 如果将sql改为<delete id="deleteUser">delete from mybatis_user where <if test="user!=null">id=#{user}}</if></delete> // 会报如下错误: There is no getter for property named 'user' in 'class java.lang.String' // 怎么回事呢? 原因是: <if test="user!=null">这种写法是针对某个对象的, 即传入对象的user字段是否为空, // 如上传入deleteUser方法的是个字符串, 并且字符串没有user这个属性,所以会报如上错误. // deleteUser(); // 删除多个对象. // 注意: 如果我们传入到Mapper层的参数只有一个,并且是List集合,mybatis会自动将其封装成Map集合,且key="list",value=List集合. // deleteUserList(); // 测试事务. // 事务回滚了: Exception in thread "main" java.lang.ArithmeticException: / by zero // testTransaction(); // 测试事务. // 注意: 在service层处理业务的时候,如果service方法被try catch包裹, 则事务是不能回滚的,因为异常被捕获了, // 解决方法是捕获Exception后手动抛出异常,throw new RuntimeException("事务回滚"); // Exception in thread "main" java.lang.RuntimeException: 事务回滚 // testTransaction2(); // 查询单个对象. // 1. 如果报错:A query was run and no Result Maps were found for the Mapped Statement 'com.ilucky.mybatis.mapper.UserMapper.getUser'. // It's likely that neither a Result Type nor a Result Map was specified. // 针对查询语句, 必须指定返回类型, 通过resultType或resultMap指定, resultType和resultMap的区别是什么呢? // a. 当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。 // 所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。 // b. 当提供的返回类型是resultMap时,因为Map不能很好表示领域模型,就需要自己再进一步的把它转化为对应的对象,常常在复杂查询中很有作用. // 解决方法:添加resultType="User", 即<select id="getUser" resultType="User"> // // 2. 报错:Error instantiating class com.ilucky.mybatis.model.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: // mybatis会通过反射机制将mybatis_user数据表中的数据按照表字段名称自动映射到User类中. // 具体过程是: 首先通过反射机制创建User, 然后通过反射机制将数据按照表字段名称自动映射到User类中. // 所以User必须提供一个空的构造方法, 否则mybatis无法通过反射创建User. 为User添加完空的构造方法, 继续执行,输出结果如下 // id=49455d9faf79443c801e40ae736f0b85,name=name-8,password=password-8,sex=true,birthday=Tue Nov 03 10:07:51 CST 2015,createTime=null,userType=null // // 3. 了解了mybatis自动映射的原理后, 导致上面结果的原因就很清楚了, mybatis通过映射创建了User后, // 然后通过反射机制调用各个字段的set方法完成数据映射, 而set方法是按照数据库字段拼接的,所以setCreate_time和setUser_type会出现问题, 从而导致数据丢失. // 注意:如果User类中的字段名称和mybaits_user数据表中的名称严格一致,则不会导致上面的问题. // 解决方法:声明一个resultMap,将User类中的字段名称和mybatis_usr数据表中的名称进行手动映射. // 结合上面分析的resultType和resultMap的区别, 如果返回的数据可以支持自动映射到某个model类上,则可以使用resultType,否则需要使用resultMap进行手动映射. // 完成手动映射,输出结果如下: // id=49455d9faf79443c801e40ae736f0b85,name=name-8,password=password-8,sex=true,birthday=Tue Nov 03 10:07:51 CST 2015,createTime=Thu Oct 01 12:38:31 CST 2015,userType=COMMON // getUser(); // 查询所有对象. // 注意: mybatis的Mapper实现是通过id来区分的,所以id不能重复. // getUserList(); // 根据name查询对象. // 注意: 查询单个对象和查询所有对象,写法基本上是一样的(<select id="getUser" resultMap="userMap">), mybatis是如何查询结果并进行封装的? // 如果数据表中name是唯一的, 则查询是没有问题的, 但是如果不是唯一的, 有两条数据name是一样的, // 则User getUserByName1(String name);会报错: expected one result (or null) to be returned by selectOne(), but found: 2 // 而List<User> getUserByName2(String name);不会报错. // 结论: 当查询对象时,mybatis会分析mapper层方法的返回结果,如果是一个对象,则数据库查询必须返回一个,否则会报错, // 如果mybatis分析mapper层方法的返回结果是一个对象集合, 则没有任何限制. // 最后,如果mapper层返回的是一个对象,则封装成resultMap,如果mapper层返回的是一个对象集合,则封装成一个元素为resultMap的List集合. // 所以, 针对这种查询,建议返回一个List集合。另外,这里只做一个简单分析,后面会深入分析mybatis源码. // getUserByName(); // 查询所有对象个数. // getUserCount(); // 分页查询对象(包括条件查询和模糊查询). // 注意: 针对时间的排序和比较,要用order by或者between and,不能像比较字符串那样比较,否则会有问题. getUserListByPage(); } /** * 简单测试. */ public static void test() { String resource = "mybatis-test.xml"; InputStream is = null; SqlSessionFactory ssf = null; SqlSession ss = null; try { is = Resources.getResourceAsStream(resource); ssf = new SqlSessionFactoryBuilder().build(is, "development"); ss = ssf.openSession(); ss.insert("createUser", new User(IdUtil.getId(), "test", "123456", true, new Date(), new Date(), UserType.COMMON)); ss.commit(); logger.info("创建用户成功"); } catch (IOException e) { logger.error("异常:"+e); } finally { try { if(ss != null) { ss.close(); ss = null; } if(is != null) { is.close(); is = null; } } catch (IOException e) { logger.error("异常:"+e); } } } /** * 加载spring配置文件和log4j日志文件 * @return boolean */ public static boolean initEnv() { try { context = new ClassPathXmlApplicationContext("spring.xml"); PropertyConfigurator.configure("src/main/resources/log4j.properties"); logger.info("初始化环境成功"); return true; } catch (Exception e) { logger.error("初始化环境异常:"+e); return false; } } /** * 保存单个对象 */ public static void createUser() { User user = new User(IdUtil.getId(), "name-0", "123456", true, new Date(), new Date(), UserType.COMMON); userService.createUser(user); } /** * 保存多个对象 */ public static void createUserList() { List<User> userList = new ArrayList<User>(); for(int i = 0; i < 10; i++) { int number = new Random().nextInt(24 * 3);// 生日跨度是72个小时~=3天. int number2 = new Random().nextInt(24 * 3); // 创建时间跨度是72个小时~=3天. Date birthday = new Date(new Date().getTime() - 1000 * 60 * 60 * number); Date createTime = new Date(new Date().getTime() - 1000 * 60 * 60 * number2); User user = new User(IdUtil.getId(), "name-"+i, "password-"+i, i%2 == 0 ? true : false, birthday, createTime, i%2 == 0 ? UserType.COMMON : UserType.SUPER); userList.add(user); } userService.createUserList(userList); } /** * 修改对象 */ public static void modifyUser() { User user = new User("072462ba0236401fbb411ba95702a058", "name-modify", "654321", false, new Date(), new Date(), UserType.SUPER); userService.modifyUser(user); } /** * 删除单个对象 */ public static void deleteUser() { userService.deleteUser("3e028c910ef1483b85d8bb7228be5fff"); } /** * 删除多个对象 */ public static void deleteUserList() { List<String> userList = new ArrayList<String>(); userList.add("a93e28b75d144df198388be82a634147"); userList.add("b3d59acfea404244890b74732ac726ae"); userService.deleteUserList(userList); } /** * 测试事务 */ private static void testTransaction() { userService.testTransaction(); } /** * 测试事务 */ private static void testTransaction2() { userService.testTransaction2(); } /** * 查询单个对象 */ private static void getUser() { userService.getUser("c71bad53655c4844aec9d43e81c3e61f"); } /** * 查询所有对象 */ private static void getUserList() { userService.getUserList(); } /** * 查询所有对象个数 */ private static void getUserCount() { userService.getUserCount(); } /** * 根据用户名查询对象 */ private static void getUserByName() { userService.getUserByName("name-transaction1"); } /** * 分页查询对象 */ private static void getUserListByPage() { userService.getUserListByPage(); }}
package com.ilucky.mybatis.service;import java.util.List;import com.ilucky.mybatis.model.User;/** * v1.0:20161107 * @author IluckySi * @since 20151013 */public interface UserService { /** * 创建User * @param user */ public void createUser(User user); /** * 创建User集合 * @param userList */ public void createUserList(List<User> userList); /** * 修改User * @param user */ public void modifyUser(User user); /** * 删除User * @param user */ public void deleteUser(String user); /** * 删除User集合 * @param userList */ public void deleteUserList(List<String> userList); /** * 测试事务 */ public void testTransaction(); /** * 测试事务 */ public void testTransaction2(); /** * 查询User *@param user */ public void getUser(String user); /** * 查询User集合 */ public void getUserList(); /** * 根据name查询User *@param user */ public void getUserByName(String name); /** * 查询User数量 */ public void getUserCount(); /** * 分页查询User集合 */ public void getUserListByPage();}package com.ilucky.mybatis.service;import java.util.Date;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Random;import org.apache.log4j.Logger;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import com.ilucky.mybatis.mapper.UserMapper;import com.ilucky.mybatis.model.User;import com.ilucky.mybatis.model.UserType;import com.ilucky.mybatis.util.IdUtil;/** * v1.0:20161117 * @author IluckySi * @since 20151013 */@Service("userService")@Transactional(rollbackFor = Exception.class)public class UserServiceImpl implements UserService { private static Logger logger = Logger.getLogger(UserServiceImpl.class); @Autowired private UserMapper userMapper; @Override public void createUser(User user) { userMapper.createUser(user); } @Override public void createUserList(List<User> userList) { userMapper.createUserList(userList); } @Override public void modifyUser(User user) { userMapper.modifyUser(user); } @Override public void deleteUser(String user) { userMapper.deleteUser(user); } @Override public void deleteUserList(List<String> userList) { userMapper.deleteUserList(userList); } @Override public void testTransaction() { User user1 = new User(IdUtil.getId(), "name-transaction1", "123456", true, new Date(), new Date(), UserType.COMMON); User user2 = new User(IdUtil.getId(), "name-transaction2", "123456", true, new Date(), new Date(), UserType.COMMON); userMapper.createUser(user1); int i = 1; logger.info("测试事务"+100/(i-1)); userMapper.createUser(user2); } @Override public void testTransaction2() { try { User user1 = new User(IdUtil.getId(), "name-transaction1", "123456", true, new Date(), new Date(), UserType.COMMON); User user2 = new User(IdUtil.getId(), "name-transaction2", "123456", true, new Date(), new Date(), UserType.COMMON); userMapper.createUser(user1); int i = 1; logger.info("测试事务"+100/(i-1)); userMapper.createUser(user2); } catch (Exception e) { logger.error("测试事务发生异常"+e); // throw new RuntimeException("事务回滚"); } } @Override public void getUser(String user) { User userResult = userMapper.getUser(user); logger.info(userResult); } @Override public void getUserList() { List<User> userList= userMapper.getUserList(null); if(userList != null) { logger.info("共"+userList.size()+"条数据"); for(int i = 0; i < userList.size(); i++) { logger.info(userList.get(i)); } } } @Override public void getUserByName(String name) { //User userResult = userMapper.getUserByName1(name); //logger.info(userResult); List<User> userList= userMapper.getUserByName2(name); if(userList != null) { logger.info("共"+userList.size()+"条数据"); for(int i = 0; i < userList.size(); i++) { logger.info(userList.get(i)); } } } @Override public void getUserCount() { int count = userMapper.getUserCount(); logger.info(count); } @Override public void getUserListByPage() { Map<String, Object> condition = new HashMap<String, Object>(); condition.put("first", 0); condition.put("count", 5); condition.put("userType", UserType.COMMON.name()); condition.put("likeName", "%" + "-2" +"%"); int number = new Random().nextInt(24 * 3);//生日跨度是72个小时~=3天. Date smallBirthday = new Date(new Date().getTime() - 1000 * 60 * 60 * number); logger.info("smallBirthday="+smallBirthday); condition.put("smallBirthday", smallBirthday); condition.put("bigBirthday", new Date()); List<User> userList= userMapper.getUserList(condition); if(userList != null) { logger.info("共"+userList.size()+"条数据"); for(int i = 0; i < userList.size(); i++) { logger.info(userList.get(i)); } } }}
package com.ilucky.mybatis.mapper;import java.util.List;import java.util.Map;import com.ilucky.mybatis.model.User;/** * v1.0:20161107 * * @author IluckySi * @since 20151013 */public interface UserMapper { /** * 创建User * * @param user */ public void createUser(User user); /** * 创建User集合 * * @param userList */ public void createUserList(List<User> userList); /** * 修改User * * @param user */ public void modifyUser(User user); /** * 删除User * * @param user */ public void deleteUser(String user); /** * 删除User集合 * * @param user */ public void deleteUserList(List<String> userList); /** * 查询User * * @param user * @reuturn User */ public User getUser(String user); /** * 根据name查询User * * @param user * @reuturn User */ public User getUserByName1(String name); /** * 根据name查询User * * @param user * @return List<User> */ public List<User> getUserByName2(String name); /** * 查询User集合 * * @return List<User> */ public List<User> getUserList(Map<String, Object> condition); /** * 查询User数量 * * @return int */ public int getUserCount();}<?xml version="1.0" encoding="UTF-8"?><!-- v1.0:20161107 --><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.ilucky.mybatis.mapper.UserMapper"> <resultMap type="User" id="userMap"> <id property="id" column="id"></id> <id property="name" column="name"></id> <id property="password" column="password"></id> <id property="sex" column="sex"></id> <id property="birthday" column="birthday" ></id> <id property="createTime" column="create_time" ></id> <id property="userType" column="user_type"></id> </resultMap> <insert id="createUser"> insert into mybatis_user(id, name, password, sex, birthday, create_time, user_type) values(#{id}, #{name}, #{password}, #{sex}, #{birthday}, #{createTime}, #{userType}) </insert> <insert id="createUserList" > insert into mybatis_user(id, name, password, sex, birthday, create_time, user_type) values <foreach collection="list" item="item" index="index" separator=","> (#{item.id}, #{item.name}, #{item.password}, #{item.sex}, #{item.birthday}, #{item.createTime}, #{item.userType}) </foreach> </insert> <update id="modifyUser"> update mybatis_user set <if test="name!=null">name=#{name},</if> <if test="password!=null">password=#{password},</if> <if test="sex!=null">sex=#{sex},</if> <if test="birthday!=null">birthday=#{birthday},</if> <if test="userType!=null">user_type=#{userType},</if> id=#{id} where <if test="id!=null">id=#{id}</if> </update> <!-- 如下方式会异常: Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'user' in 'class java.lang.String' --> <!-- <delete id="deleteUser"> delete from mybatis_user where <if test="user!=null">id=#{user}}</if> </delete> --> <delete id="deleteUser"> delete from mybatis_user where id=#{user} </delete> <delete id="deleteUserList"> delete from mybatis_user where id in <foreach collection="list" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </delete> <select id="getUser" resultMap="userMap"> select * from mybatis_user where id=#{user} </select> <select id="getUserByName1" resultMap="userMap"> select * from mybatis_user where name=#{name} </select> <select id="getUserByName2" resultMap="userMap"> select * from mybatis_user where name=#{name} </select> <!-- <select id="getUserList" resultMap="userMap"> select * from mybatis_user </select> --> <!-- 时间比较有问题 --> <!-- <select id="getUserList" resultMap="userMap"> select * from mybatis_user where 1=1 <if test="smallBirthday!=null"> and birthday >#{smallBirthday} </if> <if test="bigBirthday!=null"> and birthday <#{bigBirthday} </if> <if test="userType!=null"> and user_type=#{userType} </if> <if test="likeName!=null"> and name like#{likeName} </if> <if test="first!=null"> limit ${first},${count}</if> </select> --> <select id="getUserList" resultMap="userMap"> select * from mybatis_user where 1=1 <if test="smallBirthday!=null and bigBirthday!=null"> and birthday between #{smallBirthday} and #{bigBirthday}</if> <if test="userType!=null"> and user_type=#{userType} </if> <if test="likeName!=null"> and name like#{likeName} </if> <if test="first!=null"> limit ${first},${count}</if> </select> <select id="getUserCount" resultType="int"> select count(*) from mybatis_user </select></mapper>
package com.ilucky.mybatis.model;import java.util.Date;/** * v1.0:20161107 * @author IluckySi * @since 20151013 */public class User { private String id; private String name; private String password; private boolean sex; private Date birthday; private Date createTime; private UserType userType; public User() { } public User(String id, String name, String password, boolean sex, Date birthday, Date createTime, UserType userType) { super(); this.id = id; this.name = name; this.password = password; this.sex = sex; this.birthday = birthday; this.createTime = createTime; this.userType = userType; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public boolean isSex() { return sex; } public void setSex(boolean sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public Date getCreateTime() { return createTime; } public void setCreateTime(Date createTime) { this.createTime = createTime; } public UserType getUserType() { return userType; } public void setUserType(UserType userType) { this.userType = userType; } public String toString() { return "id="+id+",name="+name+",password="+password+",sex="+sex+",birthday="+birthday+",createTime="+createTime+",userType="+userType; }}package com.ilucky.mybatis.model;/** * v1.0:20161107 * @author IluckySi * @since 20151013 */public enum UserType { COMMON("common", "普通用户"), SUPER("super", "超级用户"); public String name; public String displayName; UserType(String name, String displayName) { this.name = name; this.displayName = displayName; }}
<!-- v1.0:20161117 --><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:jms="http://www.springframework.org/schema/jms" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd"> <!-- 配置数据库参数 --> <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close"> <property name="driverClass" value="com.mysql.jdbc.Driver" /> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8" /> <property name="username" value="root" /> <property name="password" value="root" /> </bean> <!-- 配置mybaits注入 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis.xml"></property> <property name="dataSource" ref="dataSource" /> </bean> <!-- 配置mapper扫描--> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ilucky.mybatis.mapper" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /> </bean> <!-- 配置service扫描 --> <context:component-scan base-package="com.ilucky.mybatis.service" /> <!-- 配置事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 通过aop配置让所有service包下所有bean的方法拥有事务 --> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*"></tx:method> </tx:attributes> </tx:advice> <!-- pointcut中expression的意思是: 第一个*表示方法的返回值可以是任意的. 第一个..表示service包下任意的class. 第二个*表示service包下任意class中的任意方法. 第一个..表示service包下任意class中的任意方法中的参数可以是任意的. (注意第一个星号后面必须要有一个空格,否则会报错误)--> <aop:config proxy-target-class="true"> <aop:pointcut id="serviceMethod" expression="execution(* com.ilucky.mybatis.service..*(..))"></aop:pointcut> <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice"></aop:advisor> </aop:config></beans>
<?xml version="1.0" encoding="UTF-8" ?><!-- v1.0:20161117 --><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!-- 配置缓存设置 --> <settings> <setting name="cacheEnabled" value="false"/> </settings> <!--配置model别名--> <typeAliases> <typeAlias type="com.ilucky.mybatis.model.User" alias="User" /> </typeAliases> <!--加载mapper文件 --> <mappers> <mapper resource="com/ilucky/mybatis/mapper/UserMapper.xml" /> </mappers></configuration><?xml version="1.0" encoding="UTF-8" ?><!-- v1.0:20161116 --><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <!--给实体类起一个别名 User--> <typeAliases> <typeAlias type="com.ilucky.mybatis.model.User" alias="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://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/> <property name="username" value="root" /> <property name="password" value="root" /> </dataSource> </environment> </environments> <!--装载xml,相当于把dao的实现装载进来 --> <mappers> <mapper resource="com/ilucky/mybatis/mapper/UserMapper.xml" /> </mappers></configuration>#Loggerslog4j.rootLogger=debug,console,file#consolelog4j.logger.console=debuglog4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%d]-%p-%l-%m%n#filelog4j.logger.file=debuglog4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=D://mybatis-util.loglog4j.appender.file.MaxFileSize=100KBlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=[%d]-%p-%l-%m%n/*创建数据库语句*/CREATE Database If Not Exists mybatis Character Set UTF8;use mybatis;/*创建数据表语句*/DROP TABLE IF EXISTS `mybatis_user`;CREATE TABLE `mybatis_user` ( `id` VARCHAR(128) NOT NULL UNIQUE, `name` VARCHAR(128) NOT NULL, `password` VARCHAR(1280) NOT NULL, `sex` TINYINT(1) NOT NULL, `birthday` DATETIME NOT NULL, `create_time` DATETIME NOT NULL, `user_type` VARCHAR(128) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
阅读全文
0 0
- MyBatis经典入门实例
- MyBatis经典入门实例
- MyBatis经典入门实例
- mybatis入门实例
- mybatis入门实例
- MyBatis入门实例简介
- MyBatis入门实例
- MyBatis经典入门实例
- MyBatis入门实例简介
- Mybatis入门实例
- MyBatis经典入门实例
- MyBatis上手入门实例
- Mybatis入门实例(一)
- mybatis 入门实例
- mybatis入门实例
- Mybatis入门实例
- MyBatis入门实例
- MyBatis经典入门实例
- Android通过JDBC连接MySql数据库
- Android 通过iptables修改到指定主机的路由信息
- Oracle分页
- Android Support兼容包(兼容问题总结)
- monkey: android viewpager.offset on a null object reference
- MYBATIS- 入门实例
- Kotlin笔记(九)——语法拾遗
- 飞行器制导控制课程设计
- BDFF 2017大数据金融论坛8月23-24日上海举行!
- 轻量级框架Spring的管理代码耦合之道
- 自响应式企业网站源码MVC源码
- 键、索引、约束及其区别
- POJ
- caffe2--Toy Regression(五)