目录
本系列博客将对mybatis的源码进行解读,关于mybatis的使用教程,可以查看我前面写的博客——传送门。
为了便于后面的讲解,我们这里首先构造一个统一环境。也可以参考mybatis官网。
回到顶部
DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `user_id` int(32) NOT NULL COMMENT '用户id', `user_name` varchar(64) default NULL COMMENT '用户姓名', `user_age` int(3) default NULL COMMENT '用户年龄', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
回到顶部
相关配置的版本如下:
1 2 3 4 5 |
|
回到顶部
1 25 4.0.0 6 7com.ys 8MybatisDemo 91.0-SNAPSHOT 1011 30 3112 16org.mybatis 13mybatis 143.4.3 1517 22 23junit 18junit 194.12 20test 2124 28 29mysql 25mysql-connector-java 265.1.30 2732 62 63 6433 42 4334 41org.apache.maven.plugins 35maven-compiler-plugin 3637 38 401.8 3944 6145 52src/main/java 4647 50**/*.properties 48**/*.xml 49false 5153 60src/main/resources 5455 58**/*.properties 56**/*.xml 57false 59
分别在pom文件中添加mybatis包,mysql数据库连接包,Junit测试包。
注意:由于我使用的编译器是 IDEA,这里必须在pom文件中配置对resource资源目录下的xml 文件的访问,否则,IEDA会读取不到resource目录下的配置文件。
回到顶部
①、jdbc.properties
1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/mybatisTest?useUnicode=true&characterEncoding=utf-8 3 jdbc.username=root 4 jdbc.password=root
②、mybatsi-configuration.xml
1 2 34 5 6 7 8 910 11 22 2312 2113 14 15 2016 17 18 19 24 2625
回到顶部
前面我们创建了 user 表,这里创建其实体类。
1 package com.ys.po; 2 3 import java.io.Serializable; 4 5 public class User implements Serializable{ 6 7 public User() { 8 super(); 9 } 10 public User(Integer id, String name, Integer age) { 11 super(); 12 this.id = id; 13 this.name = name; 14 this.age = age; 15 } 16 private Integer id; 17 private String name; 18 private Integer age; 19 public Integer getId() { 20 return id; 21 } 22 public void setId(Integer id) { 23 this.id = id; 24 } 25 public String getName() { 26 return name; 27 } 28 public void setName(String name) { 29 this.name = name; 30 } 31 public Integer getAge() { 32 return age; 33 } 34 public void setAge(Integer age) { 35 this.age = age; 36 } 37 @Override 38 public String toString() { 39 return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 40 } 41 42 }
注意:根据阿里巴巴的最新编码规范,实体类中的属性不要写基本数据类型,必须使用包装类型。比如 int 类型的 id,我们应该写成其包装类 Integer 类型。
原因:比如显示成交总额涨跌情况,即正负 x %, x 为基本数据类型,调用的 RPC 服务,调用不成功时,返回的是默认值,页面显示为 0%,这是不合理的,应该显示成中划线。所以包装数据类型的 null 值,能够表示额外的信息,如:远程调用失败,异常退出。
回到顶部
1 2 56 7 11 128 9 10 13 user_id, user_name, user_age 14 15 16 17 22 23 24 25 30 31 32 3334 insert into 35 user( 38 39 40) 36 value(#{id,jdbcType=INTEGER},#{name,jdbcType=VARCHAR},#{age,jdbcType=INTEGER}) 37 41 update user set 42 user_name=#{name,jdbcType=VARCHAR} where user_id=#{id,jdbcType=INTEGER} 43 44 45 4647 delete from 48 user where user_id=#{id,jdbcType=INTEGER} 49 50
回到顶部
1 package com.ys.test; 2 3 import java.io.InputStream; 4 import java.util.List; 5 6 import org.apache.ibatis.session.SqlSession; 7 import org.apache.ibatis.session.SqlSessionFactory; 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 9 import org.junit.Test; 10 11 import com.ys.po.User; 12 13 public class MybatisTest { 14 private static final String NAME_SPACE = "com.ys.po.userMapper"; 15 private static SqlSessionFactory sqlSessionFactory; 16 17 static{ 18 InputStream inputStream = MybatisTest.class.getClassLoader().getResourceAsStream("mybatis-configuration.xml"); 19 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); 20 } 21 /** 22 * 查询单个记录 23 */ 24 @Test 25 public void testSelectOne(){ 26 SqlSession session = sqlSessionFactory.openSession(); 27 User user = session.selectOne(NAME_SPACE+".selectUserById", 1); 28 System.out.println(user); 29 session.close(); 30 31 } 32 33 /** 34 * 查询多个记录 35 */ 36 @Test 37 public void testSelectList(){ 38 SqlSession session = sqlSessionFactory.openSession(); 39 ListlistUser = session.selectList(NAME_SPACE+".selectUserAll"); 40 if(listUser != null){ 41 System.out.println(listUser.size()); 42 } 43 session.close(); 44 } 45 46 /** 47 * 插入一条记录 48 */ 49 @Test 50 public void testInsert(){ 51 SqlSession session = sqlSessionFactory.openSession(); 52 User user = new User(2,"zhangsan",22); 53 session.insert(NAME_SPACE+".insertUser", user); 54 session.commit(); 55 session.close(); 56 } 57 58 /** 59 * 更新一条记录 60 */ 61 @Test 62 public void testUpdate(){ 63 SqlSession session = sqlSessionFactory.openSession(); 64 User user = new User(2,"lisi",22); 65 session.update(NAME_SPACE+".updateUserById", user); 66 session.commit(); 67 session.close(); 68 } 69 70 /** 71 * 删除一条记录 72 */ 73 @Test 74 public void testDelete(){ 75 SqlSession session = sqlSessionFactory.openSession(); 76 session.delete(NAME_SPACE+".deleteUserById", 2); 77 session.commit(); 78 session.close(); 79 } 80 81 }
回到顶部
出现5条绿色的横杆,然后去数据库查看相应的结果。
回到顶部
这个demo没什么好说的,不懂的看我前面的新手使用教程即可,这是最原始的mybatis开发方式。后面会通过这个例子深入源码分析。