Mybatis⼊门例⼦
MyBatis 本是apache的⼀个开源项⽬iBatis, 2010年这个项⽬由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11⽉迁移到Github。
⼀、理解什么是MyBatis?
MyBatis 是⽀持普通 SQL 查询,存储过程和⾼级映射的优秀持久层框架。 MyBatis 消除了⼏乎所有的 JDBC 代码和参数的⼿⼯设置以及对结果集的检索。 MyBatis 可以使⽤简单的XML 或注解⽤于配置和原始映射,将接⼝和 Java 的 POJO( Plain Old Java Objects,普通的Java 对象)映射成数据库中的记录.
1)MyBATIS ⽬前提供了三种语⾔实现的版本,包括:Java、以及Ruby。(我主要学习java,就讲java的使⽤)
2)它提供的持久层框架包括SQL Maps和Data Access Objects(DAO)。
3)mybatis与hibernate的对⽐?
mybatis提供⼀种“半⾃动化”的ORM实现。
这⾥的“半⾃动化”,是相对Hibernate等提供了全⾯的数据库封装机制的“全⾃动化”ORM实现⽽⾔,“全⾃动”ORM实现了POJO和数据库表之间的映射,以及 SQL 的⾃动⽣成和执⾏。
⽽mybatis的着⼒点,则在于POJO与SQL之间的映射关系。
⼆、简单例⼦(快速⼊门)
1)⾸先建⽴项⽬java web
2)导⼊mybatis所需的jar包
mybatis需要jar包:mybatis-3.3.0.jar
mysql驱动jar包:mysql-connector-java-5.1.15.-bin.jar
⽇志记录jar包:log4j.jar
3)创建数据库数据(mysql)
4)mysql驱动配置⽂件(这样可以优化性能)
我个⼈喜欢把所需要使⽤到的包先建⽴好。配置⽂件先创建好。
5)添加mybatis配置⽂件l
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">
3 <configuration>
4
5 <!-- 引⼊外部配置⽂件 -->
6 <properties resource="mysql.properties"></properties>
7
8 <!-- 配置mybatis运⾏环境 -->
9 <environments default="cybatis">
10 <environment id="cybatis">
11 <!-- type="JDBC" 代表使⽤JDBC的提交和回滚来管理事务 -->
12 <transactionManager type="JDBC" />
13
14 <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
15 <!-- POOLED 表⽰⽀持JDBC数据源连接池 -->
16 <!-- UNPOOLED 表⽰不⽀持数据源连接池 -->
17 <!-- JNDI 表⽰⽀持外部数据源连接池 -->
18 <dataSource type="POOLED">
19 <property name="driver" value="${jdbc.driver}" />
20 <property name="url" value="${jdbc.url}" />
21 <property name="urname" value="${jdbc.urname}" />
22 <property name="password" value="${jdbc.password}" />
23 </dataSource>
24 </environment>
25 </environments>
26
27 </configuration>
6)创建对应的实体对象
对应的java代码:
1 batis.beans;
2
3 import java.io.Serializable;
4
5 public class UrBean implements Serializable{
6
7 private static final long rialVersionUID = 1L;
8 private Integer id;
9 private String urname;
10 private String password;
11 private Double account;
12
13 public UrBean() {
14 super();
15 }
16
17 public UrBean(String urname, String password, Double account) {
18 super();
19 this.urname = urname;
20 this.password = password;
21 this.account = account;
22 }
23
24 public UrBean(Integer id, String urname, String password, Double account) {
25 super();
26 this.id = id;
27 this.urname = urname;
28 this.password = password;
29 this.account = account;
30 }
31
32 public Integer getId() {
33 return id;
34 }
35
36 public void tId(Integer id) {
37 this.id = id;
38 }
39
40 public String getUrname() {
41 return urname;
42 }
43
44 public void tUrname(String urname) {
45 this.urname = urname;
46 }
47
48 public String getPassword() {
49 return password;
50 }
51
52 public void tPassword(String password) {
53 this.password = password;
54 }
55
56 public Double getAccount() {
57 return account;
58 }
59
60 public void tAccount(Double account) {
61 this.account = account;
62 }
63
64 @Override
65 public String toString() {
66 return "UrBean [id=" + id + ", urname=" + urname + ", password="
67 + password + ", account=" + account + "]";
68 }
69
70
71
72
73 }
7)创建⽅法接⼝UrMapper.java和定义操作t_ur表的sql映射⽂件l 提供简单的增删改查数据信息。
1 batis.mapper;
2
3 import java.util.List;
4
5 batis.beans.UrBean;
6
7 public interface UrMapper {
8 /**
9 * 新增⽤⼾
10 * @param ur
11 * @return
12 * @throws Exception
13 */
14 public int inrtUr(UrBean ur) throws Exception;
15 /**
16 * 修改⽤⼾
17 * @param ur
18 * @param id
19 * @return
20 * @throws Exception
21 */
22 public int updateUr (UrBean ur,int id) throws Exception;
23 /**
24 * 刪除⽤⼾
25 * @param id
26 * @return
27 * @throws Exception
28 */
29 public int deleteUr(int id) throws Exception;
30 /**
31 * 根据id查询⽤户信息
32 * @param id
33 * @return
34 * @throws Exception
35 */
36 public UrBean lectUrById(int id) throws Exception;
37 /**
38 * 查询所有的⽤户信息
39 * @return
40 * @throws Exception
41 */
42 public List<UrBean> lectAllUr() throws Exception;
43 }
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE mapper PUBLIC "-///DTD Mapper 3.0" "/dtd/mybatis-3-mapper.dtd">
3 <mapper namespace="batis.mapper.UrMapper">
4 <!-- ⾃定义返回结果集 -->
5 <resultMap id="urMap" type="UrBean">
6 <id property="id" column="id" javaType="java.lang.Integer"></id>
7 <result property="urname" column="urname" javaType="java.lang.String"></result>
8 <result property="password" column="password" javaType="java.lang.String"></result>
9 <result property="account" column="account" javaType="java.lang.Double"></result>
10 </resultMap>
11 <!-- 在各种标签中的id属性必须和接⼝中的⽅法名相同, id属性值必须是唯⼀的,不能够重复使⽤。parameterType属性指明查询时使⽤的参数类型,resultType属性指明查询返回的结果集类型-->
12 <!-- uGeneratedKeys:(仅对 inrt 有⽤)这会告诉 MyBatis 使⽤ JDBC 的getGeneratedKeys
13 ⽅法来取出由数据(⽐如:像 MySQL 和 SQLServer 这样的数据库管理系统的⾃动递增字段)内部⽣成的主键。默认值: fal。 -->
14 <!--keyProperty:(仅对 inrt有⽤)标记⼀个属性, MyBatis 会通过 getGeneratedKeys或者通过 inrt 语句的 lectKey ⼦元素设置它的值。默认:不设置。 -->
15 <!--#{}中的内容,为占位符,当参数为某个JavaBean时,表⽰放置该Bean对象的属性值 -->
16
17
18 <inrt id="inrtUr" uGeneratedKeys="true" keyProperty="id">
19 inrt into t_ur (urname,password,account) values (#{urname},#{password},#{account})
20 </inrt>
21
22 <update id="updateUr" >
23 update t_ur t urname=#{urname},password=#{password},account=#{account} where id=#{id}
24 </update>
25
26 <delete id="deleteUr" parameterType="int">
27 delete from t_ur where id=#{id}
28 </delete>
29
30 <lect id="lectUrById" parameterType="int" resultMap="urMap">
31 lect * from t_ur where id=#{id}
32 </lect>
33
34 <lect id="lectAllUr" resultMap="urMap">
35 lect * from t_ur
36 </lect>
37
38
39 </mapper>
这时需要为l⾥注册l⽂件。
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!DOCTYPE configuration PUBLIC "-////DTD Config 3.0//EN" "/dtd/mybatis-3-config.dtd">
3 <configuration>
4
5 <!-- 引⼊外部配置⽂件 -->
6 <properties resource="mysql.properties"></properties>
7
8
9 <!-- 为JAVA Bean起类别名 -->
10 <typeAlias >
11 <!-- 别名⽅式1,⼀个⼀个的配置 type中放置的是类的全路径,alias中放置的是类别名
12 <typeAlia type="batis.beans.UrBean" alias="UrBean"/> -->
13 <!-- 别名⽅式2,⾃动扫描,将JAVA类的类名作为类的类别名 -->
14 <package name="batis.beans"/>
15 </typeAlias>
16
17
18 <!-- 配置mybatis运⾏环境 -->
19 <environments default="cybatis">
20 <environment id="cybatis">
21 <!-- type="JDBC" 代表使⽤JDBC的提交和回滚来管理事务 -->
22 <transactionManager type="JDBC" />
23
24 <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI -->
25 <!-- POOLED 表⽰⽀持JDBC数据源连接池 -->
26 <!-- UNPOOLED 表⽰不⽀持数据源连接池 -->
27 <!-- JNDI 表⽰⽀持外部数据源连接池 -->
28 <dataSource type="POOLED">
29 <property name="driver" value="${jdbc.driver}" />
30 <property name="url" value="${jdbc.url}" />
31 <property name="urname" value="${jdbc.urname}" />
32 <property name="password" value="${jdbc.password}" />
33 </dataSource>
34 </environment>
35 </environments>
36
37
38 <mappers>
39 <!-- 告知映射⽂件⽅式1,⼀个⼀个的配置
40 <mapper resource="com/cy/mybatis/l"/>-->
41 <!-- 告知映射⽂件⽅式2,⾃动扫描包内的Mapper接⼝与配置⽂件 -->
42 <package name="com/cy/mybatis/mapper"/>
43 </mappers>
44 </configuration>
8)需要建⽴⼀个⼯具类⽂件
1 ls;
2
3 import java.io.Reader;
4
5 import org.apache.ibatis.io.Resources;
6 import org.apache.ibatis.ssion.SqlSession;
7 import org.apache.ibatis.ssion.SqlSessionFactory;
8 import org.apache.ibatis.ssion.SqlSessionFactoryBuilder;
9
10 public class DBTools {
11 public static SqlSessionFactory ssionFactory;
12
13 static{
14 try {
15 //使⽤MyBatis提供的Resources类加载mybatis的配置⽂件
16 Reader reader = ResourceAsReader("l");
17 //构建sqlSession的⼯⼚
18 ssionFactory = new SqlSessionFactoryBuilder().build(reader);
19 } catch (Exception e) {
20 e.printStackTrace();
21 }
22
23 }
24 //创建能执⾏映射⽂件中sql的sqlSession
25 public static SqlSession getSession(){
26 return ssionFactory.openSession();
27 }
28
29 }
9)写个测试
1 batis.rvice;
2
3 import java.util.List;
4
5 import org.apache.ibatis.ssion.SqlSession;
6
7 batis.beans.UrBean;
8 ls.DBTools;
9 batis.mapper.UrMapper;
10
11 public class UrService {
12
13
14 15
16 public static void main(String[] args) {
17 inrtUr();
18 // deleteUr();
19 // lectUrById();
20 // lectAllUr();
21 }
22
23
24 /**
25 * 新增⽤户
26 */
27 private static void inrtUr() {
28 SqlSession ssion = Session();
29 UrMapper mapper = Mapper(UrMapper.class);
30 UrBean ur = new UrBean("懿", "1314520", 7000.0);
31 try {
32 mapper.inrtUr(ur);
33 System.out.String());
34 it();
35 } catch (Exception e) {
36 e.printStackTrace();
37 llback();
38 }
39 }
40
41
42 /**
43 * 删除⽤户
44 */
45 private static void deleteUr(){
46 SqlSession Session();
47 UrMapper Mapper(UrMapper.class);
48 try {
49 mapper.deleteUr(1);
50 it();
51 } catch (Exception e) {
52 e.printStackTrace();
53 llback();
54 }
55 }
56
57
58 /**
59 * 根据id查询⽤户
60 */
61 private static void lectUrById(){
62 SqlSession Session();
63 UrMapper Mapper(UrMapper.class);
64 try {
65 UrBean ur= mapper.lectUrById(2);
66 System.out.String());
67
68 it();
69 } catch (Exception e) {
70 e.printStackTrace();
71 llback();
72 }
73 }
74
75 /**
76 * 查询所有的⽤户
77 */
78 private static void lectAllUr(){
79 SqlSession Session();
80 UrMapper Mapper(UrMapper.class);
81 try {
82 List<UrBean> ur=mapper.lectAllUr();
83 System.out.String());
84 it();
85 } catch (Exception e) {
86 e.printStackTrace();
87 llback();
88 }
89 }
90
91
92 }
测试结果
inrt。