mybatis基本操作(一)

 之前写过一篇关于ibatis的文章,这两天学习了mybatis.

 Ibatis本是apache的一个开源项目,2010年这个项目由apache software foundation 迁移到了google code,并且改名为mybatis.

 MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索.MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录.mybatis对数据库的操作有两种方式:配置文件和注解.下面就详细介绍用这两种方式.无论哪种方式,都得首先配置最主要的配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!-- 文档申明 -->
 3 <!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.1//EN" "http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
 4 <configuration>
 5     <!-- 引入properties文件 -->
 6     <properties resource="com/zhouxy/ibatis/DBInfo.properties"/>
 7
 8     <!-- 类型别名是为 Java 类型命名一个短的名字。它只和 XML 配置有关,只用来减少类完全限定名的多余部分. -->
 9     <!-- 使用这个配置, “Student”可以任意用来替代“com.zhouxy.ibatis.Student”所使用的地方。 -->
10     <typeAliases>
11         <typeAlias type="com.zhouxy.ibatis.Student" alias="Student"/>
12     </typeAliases>
13
14   <environments default="development"><!-- 默认的环境ID -->
15     <environment id="development">
16     <transactionManager type="JDBC"/><!-- 事务管理器的配置 [JDCB或者MANAGED]-->
17     <dataSource type="POOLED">         <!-- 数据源的配置 -->
18         <property  name="driver" value="${driver}"/>    <!-- 将DBInfo.properties文件中的属性绑定 -->
19         <property  name="url" value="${url}"/>
20         <property  name="username" value="${username}"/>
21         <property  name="password" value="${password}"/>
22     </dataSource>
23     </environment>
24   </environments>
25   <!-- mybatis的行为配置以上的就可以,详细的可以参看mybatis的参看文档, -->
26
27   <!-- 既然这些都配置好了,现在就要定义SQL的映射语句了,下面语句就是告诉mybatis去哪儿找映射文件 -->
28     <mappers>
29         <mapper resource="com/zhouxy/ibatis/Student.xml"/>
30     </mappers>
31
32 </configuration>

 DBInfo.properties文件:

1 driver=com.mysql.jdbc.Driver
2 url=jdbc:mysql://localhost:3306/ibatis
3 username=root
4 password=root

 Student.xml文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!--   这个文件是一个关键,映射了所有的DAO操作方法(HIBERNATE是映射实体,IBATIS映射方法) -->
 3 <!-- 文档申明 -->
 4 <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.1//EN" "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
 5 <mapper namespace="com.zhouxy.ibatis.StudentDao"> <!-- 这个命名空间非常重要,UserDAO是一个接口 -->
 6
 7     <sql id="studentColumns">name,age</sql>    <!-- 定义sql语句中要查找的列,之后根据id使用. -->
 8
 9     <!-- 查找全部学生  -->
10     <select id="selectAllStudent" resultType="Student">    <!--这个id非常重要,在DAO中,直接使用命名空间.ID来对应这个SQL语句  -->
11         select * from student
12     </select>
13
14     <!-- 删除指定的学生 -->
15     <delete id="deleteStudentById" parameterType="java.lang.Integer">
16         delete from student where id = #{id}
17     </delete>
18
19     <!-- 新增学生 -->
20     <insert id="insertStudent" parameterType="Student" keyProperty="id" useGeneratedKeys="true">
21         insert into student(name,age) values(#{name},#{age})
22     </insert>
23
24     <!-- 根据ID查找指定的学生 -->
25     <select id="selectStudentById" parameterType="int" resultType="Student">
26         select <include refid="studentColumns"/> <!-- 使用了前面定义要查找的列 -->
27         from student where id = #{id}
28     </select>
29
30     <!-- 更新学生信息 -->
31     <update id="updateStudentById" parameterType="int">
32         update student set name = #{name},age=#{age}
33         where id = #{id}
34     </update>
35
36     <!-- 模糊查询 -->
37     <select id="selectStudentByName" parameterType="String" resultType="Student">
38         select <include refid="studentColumns"/>
39         from student
40         where name like <!-- concat(concat(‘%‘,#{name}),‘%‘) --> "%"#{name}"%"
41     </select>
42 </mapper>

 每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 。SqlSessionFactory本身是由SqlSessionFactoryBuilder创建的,一般而言,在一个应用中,一个数据库只会对应一 个SqlSessionFactory,所以一般我们都把SqlSessionFactory定义成单例模式,或通过Spring等进行注入。下面是我封装的获取SqlSessionFactory对象。

 1 package com.zhouxy.ibatis;
 2
 3 import java.io.IOException;
 4 import java.io.Reader;
 5
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSessionFactory;
 8 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 9
10
11 /**
12  * 该类获取SqlSessionFactory对象.
13  * @author zhouxy
14  *
15  */
16 public class SessionFactoryUtils {
17     private final static String source = "com/zhouxy/ibatis/SqlMapConfig.xml";    //要解析的总配置文件路径
18     private static SqlSessionFactory sqlSessionFactory = null;
19
20     public static SqlSessionFactory getSqlSessionFactory(){
21
22         Reader reader = null;
23
24         try {
25             reader = Resources.getResourceAsReader(source);    //mybatis封装的解析文件的方法.更多方法参看mybatis的参考文档
26             sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);    //获得sqlsessionfactory对象
27
28             reader.close();     //关闭读入流.
29         } catch (IOException e) {
30             e.printStackTrace();
31         }
32
33         return sqlSessionFactory;
34     }
35 }

 对应的JavaBean:

 1 package com.zhouxy.ibatis;
 2
 3 public class Student {
 4     private int id;
 5     private String name;
 6     private int age;
 7     public int getId() {
 8         return id;
 9     }
10     public void setId(int id) {
11         this.id = id;
12     }
13     public String getName() {
14         return name;
15     }
16     public void setName(String name) {
17         this.name = name;
18     }
19     public int getAge() {
20         return age;
21     }
22     public void setAge(int age) {
23         this.age = age;
24     }
25     public Student() {
26         super();
27     }
28
29     public Student(String name,int age){
30         this.name = name;
31         this.age = age;
32     }
33
34     public Student(int id, String name, int age) {
35         super();
36         this.id = id;
37         this.name = name;
38         this.age = age;
39     }
40     @Override
41     public String toString() {
42         String string = "id="+id+"\tname="+name+"\tage="+age;
43
44         return string;
45     }
46 }

 封装增删改查等方法:

 1 package com.zhouxy.ibatis;
 2
 3 import java.util.List;
 4
 5 import org.apache.ibatis.session.SqlSession;
 6 import org.apache.ibatis.session.SqlSessionFactory;
 7
 8 public class StudentDAOIbatis{
 9
10     //获得SqlSession对象
11     public static SqlSession getSqlSession(){
12         SqlSessionFactory sqlSessionFactory = SessionFactoryUtils.getSqlSessionFactory();
13         SqlSession sqlSession = sqlSessionFactory.openSession();
14
15         return sqlSession ;
16     }
17
18     //通过获得的sqlsession对象,进行对数据库的操作:增删改查
19     public static void deleteStudentById(int id){
20         SqlSession sqlsession = getSqlSession();
21         sqlsession.delete("com.zhouxy.ibatis.StudentDao.deleteStudentById", id);//引号里面的内容是student.xml文件中mapper定义的namespace
22                                                                                 //以及自定义的相应操作的id
23         sqlsession.commit();            //提交事务,必须提交
24         sqlsession.close();                //在使用mybatis的过程中每一个操作都是离不开SqlSession的,所以获取SqlSession是相当重要的。
25                                 //此外,SqlSession是不能被共享、线程不安全的,所以在每次需要SqlSession的时候都应该打开一个,然后在用完了之后再把它关上
26     }
27
28
29     //insert方法返回插入数据库时改记录对应主键的值.当然需要在Student.xml文件中将useGeneratedKeys设置为true
30     public static int insertStudent(Student student){
31         int id = 0;
32         SqlSession sqlsession = getSqlSession();
33         id = sqlsession.insert("com.zhouxy.ibatis.StudentDao.insertStudent",student);
34         sqlsession.commit();
35         sqlsession.close();
36
37         return id;
38     }
39
40     public static List<Student> getAllStudent(){
41         SqlSession sqlsession = getSqlSession();
42         List<Student> studentList = sqlsession.selectList("com.zhouxy.ibatis.StudentDao.selectAllStudent");
43         sqlsession.commit();
44         sqlsession.close();
45
46         return studentList;
47     }
48
49     public static Student getStudentById(int id){
50         SqlSession sqlsession = getSqlSession();
51         Student student = sqlsession.selectOne("com.zhouxy.ibatis.StudentDao.selectStudentById",id);
52         sqlsession.commit();
53         sqlsession.close();
54
55         return student;
56
57     }
58
59
60     //update方法返回受影响的记录数
61     public static int updateStudentById(Student student){
62         SqlSession sqlsession = getSqlSession();
63         int effectrows = sqlsession.update("com.zhouxy.ibatis.StudentDao.updateStudentById", student);
64
65         sqlsession.commit();
66         sqlsession.close();
67
68         return effectrows;
69     }
70
71     public static List<Student> getStudentByName(String name){
72         SqlSession sqlsession = getSqlSession();
73         List<Student> studentList = sqlsession.selectList("com.zhouxy.ibatis.StudentDao.selectStudentByName",name);
74         sqlsession.commit();
75         sqlsession.close();
76
77         return studentList;
78
79     }
80 }

 测试(仅举一例):

 1 package com.zhouxy.ibatis;
 2
 3 import static java.lang.System.*;
 4
 5 import java.util.List;
 6
 7 public class Test {
 8     public static void main(String[] args) {
 9         List<Student> studentList = StudentDAOIbatis.getStudentByName("张");
10         for(Student student : studentList){
11             out.println(student.toString());
12         }
13     }
14 }

 结果:

    

 以上介绍了使用配置文件进行对数据库的操作,在《mybatis基本操作(二)》会介绍使用注解对数据库进行相关的操作.希望大家提出不足!

时间: 2024-10-05 04:59:57

mybatis基本操作(一)的相关文章

mybatis基本操作(二)

在这里<mybatis基本操作(一)>我介绍了mybatis使用配置文件对数据库进行增删改查.下面将介绍mybatis使用注解进行相应的操作.首先,使用注解同样要配置总配置文件,JavaBean,以及properties文件.只是将(一)中的student.xml文件替换为studentMapper.java.如下: 1 package com.zhouxy.ibatis; 2 3 import java.util.List; 4 5 import org.apache.ibatis.anno

Spring boot MyBatis基本操作

目录结构 数据库信息: 数据库student -> 表名 custom_user  -> 主键-> custom_id ,其他字段 cusotm_name,custom_age 1.加入依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version

开发必备知识总结

  A B C 1       2    初级开发人员 3   技术分类 具体知识点 4   Java基础.核心语法.数组 JDK的安装和配置.Java技术架构.JAVA虚拟机的原理和运行机制;  数组的使用与介绍.一维数组与多维数组的定义.创建和初始化.各种数据类型的数组.Arrays工具类.冒泡排序.选择排序.二分查找. 5   面向对象程序设计.异常处理 类.类的声明与使用.对象.对象的创建和使用.面向对象的三大特征(封装.继承.多态).包.访问控制权限. static关键字.final

MyBatis的一些基本操作

在学校里只学过一点点的hibernate基础,但是这几天被熊哥叫去写好几个类的接口,所以就去百度了一下mybatis的接口方式怎么使用.1定义接口,并且定义其中要使用到的方法,这里必须注意到的是方法名必须和mapper文件中的sql语句的id一样. 2对传进去的参数,我们只要在方法的形参中定义就可以了,那么就可以直接在mapper文件中使用#{property}的这种形式得到,就不用再设置parameterType这个属性了,不过设置了当然是可以的. 3定义好接口以后,我们需要类上面用@MyBa

【mybatis】1、入门CURD基本操作(环境搭建)

#1.基本环境 环境 版本 jdk 1.7.0_10 ide eclipse-jee-luna-SR2-win32-x86_64 maven 3.3.3 mybatis 3.2.7 mysql 5.1.55 #2.所需jar包 maven的pom.xml 隐藏行号 复制代码 ? pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLS

搭建MyBatis工作环境以及增删改查基本操作

数据库准备 创建一个数据库为mybatus-test,表为user CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; insert into `user`(

Mybatis数据基本操作

<insert id="doCreate" parameterType="News"><!--添加数据--> INSERT INTO news(title,content) VALUES (#{title},#{content}) ; <selectKey keyColumn="nid" keyProperty="nid" order="AFTER" resultType=&q

基于Mybatis3.0.6的基本操作介绍

每 一 个 MyBatis 的 应 用 程 序 都 以 一 个 SqlSessionFactory 对 象 的 实 例 为 核 心 . SqlSessionFactory本身是由SqlSessionFactoryBuilder创建的,一般而言.在一个应用中,一个数据库仅仅会相应一个SqlSessionFactory.所以一般我们都把SqlSessionFactory定义成单例模式.或通过Spring等进行注入. SqlSessionFactoryBuilder创建SqlSessionFactor

Batis-iBatis基本操作(增删改查)

Batis-iBatis基本操作(增删改查) 时间 2014-04-10 17:55:20  CSDN博客 原文  http://blog.csdn.net/mazhaojuan/article/details/23354759 主题 MyBatis数据库测试技术 在上一篇iBatis博客中已介绍了如何 配置iBatis环境,这篇博客主要进行介绍一些iBatis的基本操作实现.iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现. 下面分别介绍一下iBa