Mybatis学习手记(一)
年近不惑,为生活所迫,重新开始学习JAVA,计划将公司的开发平台统一到JAVA上来。现公司的技术杂乱,有PB开发的程序要维护、有PYTHON的程序要维护,有.NET的,也有JAVA的,非常不容易形成合力。
前段时间看了几个开源的企业开发框架,希望能带领部门基于jeesite框架来开发,所以自己要尽可能多的熟悉相关技术和框架,照着网上的例子练了JAVABEAN /JSP /SERVLET /JDBC,做了几个Helloworld ,一直还算顺利.。结合网上对Mybatis和Hibermete的对比,决定学习这个简单的Mybatis框架。
感谢“孤傲苍狼”的博客,MyBatis学习总结(一)——MyBatis快速入门 ,此文基本是转载原文。
一个例子,折腾了3天才出来,碰到的坑太多了也是真的够了。
遇到的错误至今无法解决,估计是版本兼容的问题(原环境Eclipse 4.7.1a、jdk1.8 161 、Mysql 57 、tomcat 8.5 );
最终的解决方法,是在虚拟机中新建了一套环境,用的ECLIPSE 4.5.2 、JDK 1.7 、MYSQ 57、TOMCAT 8.0 才跑出来;
复盘一下:
1、创建数据库及表
CREATE DATABASE MYBATIS; CREATE TABLE users(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT); INSERT INTO USERS (NAME,AGE) VALUES("LINGRUI",25);
2、下载Mysql 和Mybatis驱动包
(因为Eclipse用的不熟,我是将这两个包,通过“Build Path "---"Configure Build Path "----"Libraries"---AddJARS加入到路径中的;)
3、创建Mybatis 环境配置 xml ,文件名可以自已随便起,我随例子一样,在SRC目录下,创建conf.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> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <!-- 配置数据库连接信息 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <!-- mybatis就是你创建的数据库名字,注意端口号 --> <property name="url" value="jdbc:mysql://localhost:3306/mybatis" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> </configuration>
4、定义表所对应的实体类 User.java
1 package Mybatis; 2 3 5 /** 6 * @author gacl 7 * users表所对应的实体类 8 */ 9 public class User { 10 11 //实体类的属性和表的字段名称一一对应 12 private int id; 13 private String name; 14 private int age; 15 16 public int getId() { 17 return id; 18 } 19 20 public void setId(int id) { 21 this.id = id; 22 } 23 24 public String getName() { 25 return name; 26 } 27 28 public void setName(String name) { 29 this.name = name; 30 } 31 32 public int getAge() { 33 return age; 34 } 35 36 public void setAge(int age) { 37 this.age = age; 38 } 39 40 @Override 41 public String toString() { 42 return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; 43 } 44 }
5、定义操作users表的sql映射文件userMapper.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3 4 <!-- 为这个mapper指定一个唯一的namespace,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的 5 例如namespace="Mybatis.userMapper"就是Mybatis(包名)+userMapper(userMapper.xml文件去除后缀) 6 --> 7 <mapper namespace="Mybatis.userMapper"> 8 9 <select id = "getUser" parameterType="int" resultType="Mybatis.User"> 10 select * from users where id=#{id} 11 </select > 12 </mapper>
6、在CONF.XML中注册userMapper.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> <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" /> <property name="username" value="root" /> <property name="password" value="" /> </dataSource> </environment> </environments> <mappers> <!-- 注册userMapper.xml文件, userMapper.xml位于Mybatis这个包下,所以resource写成Mybatis/userMapper.xml--> <mapper resource="Mybatis/userMapper.xml"/> </mappers> </configuration>
7、创建测试用例;Test1.java
1 package Mybatis; 2 3 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.io.Reader; 7 8 import org.apache.ibatis.io.Resources; 9 import org.apache.ibatis.session.SqlSession; 10 import org.apache.ibatis.session.SqlSessionFactory; 11 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 12 13 public class Test1 { 14 15 public static void main(String[] args) throws IOException { 16 //mybatis的配置文件 17 String resource = "conf.xml"; 18 //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件) 19 InputStream is = Test1.class.getClassLoader().getResourceAsStream(resource); 20 21 //构建sqlSession的工厂 22 //System.out.println(is); 23 SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is); 24 //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件) 25 //Reader reader = Resources.getResourceAsReader(resource); 26 //构建sqlSession的工厂 27 //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader); 28 //创建能执行映射文件中sql的sqlSession 29 SqlSession session = sessionFactory.openSession(); 30 /** 31 * 映射sql的标识字符串, 32 * Mybatis.userMapper是userMapper.xml文件中mapper标签的namespace属性的值, 33 * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL 34 */ 35 String statement = "Mybatis.userMapper.getUser";//映射sql的标识字符串 36 //执行查询返回一个唯一user对象的sql 37 User user = session.selectOne(statement, 1); 38 System.out.println(user); 39 } 40 }
历经九九八十一难,终修成佛,成功看到控制台的运行结果;
原博客:MyBatis学习总结(一)——MyBatis快速入门 此文有适里改动