MyBatis入门实例
来源:互联网 发布:通江集团 知乎 编辑:程序博客网 时间:2024/06/07 05:25
MyBatis入门实例
一、概述
MyBatis是一个优秀的持久层框架,ORM框架,可以使用XML配置文件或者接口加注解的方式来简化DAO操作,大大方便了SQL语句的管理。同时,MyBatis还支持动态SQL语句。由于注解的功能极为有限,这里采用XML配置文件的方式。
二、创建数据库和数据表
在MySQL创建数据库和数据表:
CREATE DATABASE test;CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `sex` char(1) NOT NULL, `age` int(11) DEFAULT NULL, `birthday` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
三、在IDEA创建Maven项目
参考http://blog.csdn.net/ac_dao_di/article/details/54233520,最后在pom.xml添加MyBatis和MySQL依赖的jar包:
<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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.baobao</groupId> <artifactId>javaee_idea</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>javaee_idea Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>6.0.5</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- 注意此处的url,上传javaee_idea.war到url,此时本地的tomcat服务器必须开启 --> <url>http://localhost:8080/manager/text</url> <!-- 此处的名字必须和setting.xml中配置的ID一致,而该id对应的用户必须在tomcat的conf/tomcat-users.xml有配置--> <server>tomcat8</server> <!-- 此处的名字是项目发布的工程名 : http://localhost:8080/javaee_idea,也是war名--> <path>/javaee_idea</path> </configuration> </plugin> </plugins> <finalName>javaee_idea</finalName> </build></project>
四、创建持久层类
4.1 创建JavaBean
对应上面的数据库表student新建一个JavaBean: src/main/java/com.baobao.Student:
package com.baobao;import java.util.Date;/** * Created by gzx on 17-1-8. */public class Student { private int id; private String name; private Date birthday; private String sex; private int age; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "Student{" + "id=" + id + ", name='" + name + '\'' + ", birthday=" + birthday + ", sex='" + sex + '\'' + ", age=" + age + '}'; }}
4.2 创建MyBatis核心配置文件
在main/resources/下建立MyBatis的配置文件mybatis.xml,文件名可以任意取。这个文件主要是配置数据库的驱动信息和连接信息,以及配置好类的类型别名,所有JavaBean的Mapper文件路径。
<?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> <!-- 类名比较长,起别名,在Mapper文件中可以使用--> <typeAliases> <typeAlias type="com.baobao.Student" alias="Student"/> </typeAliases> <environments default="development"> <environment id="development"> <!-- 事务管理类型,JDBC表示直接使用JDBC的提交和回滚设置,依赖于数据源得到的连接来管理事务 --> <transactionManager type="JDBC" /> <!-- 数据库连接池POOLED表示使用数据库连接池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="201314" /> </dataSource> </environment> </environments> <mappers> <!-- SQL代码和映射信息配置文件 --> <mapper resource="com/baobao/studentMapper.xml" /> </mappers></configuration>
4.3 创建Mapper文件,实现DAO
在main/resources/下建立上面mybatis.xml文件里的Mapper文件:com/baobao/studentMapper.xml。对于每个JavaBean,都可以写一个对应的Mapper文件。这个文件封装了数据表和JavaBean的映射关系,对该数据表的操作,主要是增删改查。
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!-- namespace必须是唯一的,建议用该文件所在的包路径全类名 --><mapper namespace="com.baobao.studentMapper"> <!-- id是主键,result是其他属性,完成JavaBean和数据库表字段的映射--> <!-- 当名字不对应时,需要完成映射--> <!-- <resultMap type="Student" id="studentResultMap"> <id column="id" jdbcType="int" property="id" javaType="int"/> <result column="name" jdbcType="varchar" property="name" javaType="String"/> <result column="sex" jdbcType="char" property="sex" javaType="String"/> <result column="age" jdbcType="int" property="age" javaType="int"/> <result column="birthday" jdbcType="Date" property="birthday" javaType="Date"/> </resultMap>--> <!-- DAO 操作 --> <!-- #{} 表示一个属性getId(),注意parameterType只能是Map或者基本类型或者自定义类,不能有多个parameterType--> <select id="getStudentById" parameterType="int" resultType="Student"> <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ --> select * from student where id = #{id} </select> <!-- 输入字符串参数 --> <select id="getStudentByName" parameterType="String" resultType="Student"> <!-- #{id}:表示占位符,也就是调用时必须为其传一个id参数进来,注意是#不是$ --> select * from student where name = #{name} </select> <!-- 指定ID为主键,并自动生成主键 --> <insert id="insertStudent" parameterType="Student" useGeneratedKeys="true" keyProperty="id"> insert into student(name, sex, age, birthday) values(#{name}, #{sex}, #{age}, #{birthday}) </insert> <!-- 输入Student参数--> <update id="updateStudent" parameterType="Student"> update student set name=#{name}, sex=#{sex},age=#{age},birthday=#{birthday} where id=#{id} </update> <delete id="deleteStudent" parameterType="int"> delete from student where id=#{id} </delete></mapper>
五、使用MyBatis API
5.1 创建获取SqlSessionFactory单例的工厂类
在src/main/java/下创建一个工厂类com.baobao.Factory,使得全局只用一个实例SqlSessionFactory。
package com.baobao;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;import java.io.InputStream;public class Factory{ private static SqlSessionFactory sqlSessionFactory; static{ // 1. 加载MyBatis的配置文件:mybatis.xml(它也加载关联的映射文件,也就是mappers结点下的映射文件) InputStream in = Factory.class.getClassLoader().getResourceAsStream("mybatis.xml"); assert(in != null); // 2. SqlSessionFactoryBuidler实例将通过输入流调用build方法来构建 SqlSession 工厂 sqlSessionFactory = new SqlSessionFactoryBuilder().build(in); try { in.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 整个应用只用一个单例的factory * @return */ public static SqlSessionFactory getSqlSessionFactory(){ return sqlSessionFactory; }}
5.2 创建单元测试类
创建test/java/com.baobao.TestMybatis,实现对Student数据表操作的测试。这里主要是使用MyBatis的API:通过加载MyBatis的配置文件,实现对数据表的增删改查。
package com.baobao;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.junit.Test;import java.util.Calendar;import java.util.List;public class TestMybatis { @Test public void testGetStudent(){ System.out.println(".............................getStudent............................."); // 获取工厂 SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory(); // 通过工厂获取 SqlSession 实例,SqlSession 完全包含了面向数据库执行 SQL 命令所需的所有方法。 SqlSession session = sqlSessionFactory.openSession(); System.out.println("one..."); // 通过namespace.id定位SQL语句 String statement = "com.baobao.studentMapper.getStudentById"; // select API : 获取一条记录 Student student = session.selectOne(statement, 3); System.out.println(student); System.out.println("list..."); statement = "com.baobao.studentMapper.getStudentByName"; String name = "Tom"; // select API : 获取一个list List<Student> list = session.selectList(statement, name); for(Student tmp : list){ System.out.println(tmp); } // 关闭输入流和SqlSession实例。SqlSession当场销毁 session.close(); } @Test public void testInsertStudent(){ System.out.println(".............................insertStudent............................."); SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); Student student = new Student(); student.setName("Tom"); student.setAge(27); student.setSex("m"); Calendar calendar = Calendar.getInstance(); //calendar.set(1995, 8, 20, 11, 23, 47); student.setBirthday(calendar.getTime()); // insert API int cnt = session.insert("com.baobao.studentMapper.insertStudent", student); assert(cnt == 1); // 事务必须提交,否则不起作用 session.commit(); session.close(); } @Test public void testDeleteStudent(){ System.out.println(".............................deleteStudent............................."); SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); // delete API session.delete("com.baobao.studentMapper.deleteStudent", 2); session.commit(); session.close(); } @Test public void testUpdateStudent(){ System.out.println(".............................updateStudent............................."); SqlSessionFactory sqlSessionFactory = Factory.getSqlSessionFactory(); SqlSession session = sqlSessionFactory.openSession(); Student student = new Student(); student.setId(3); student.setName("Amy"); student.setAge(20); student.setSex("F"); Calendar calendar = Calendar.getInstance(); // calendar.set(1997, 2, 20); student.setBirthday(calendar.getTime()); // System.out.println(calendar.getTime()); // update API int cnt = session.update("com.baobao.studentMapper.updateStudent", student); session.commit(); session.close(); }}
最后直接在IDEA运行测试,或者在根目录下运行mvn clean test。测试通过。
项目的目录结构如下:
本项目的源码下载 : http://download.csdn.net/download/ac_dao_di/9732835
参考:
http://www.cnblogs.com/bluejoe/p/5115930.html
- MyBatis经典入门实例
- MyBatis经典入门实例
- MyBatis经典入门实例
- mybatis入门实例
- mybatis入门实例
- MyBatis入门实例简介
- MyBatis入门实例
- MyBatis经典入门实例
- MyBatis入门实例简介
- Mybatis入门实例
- MyBatis经典入门实例
- MyBatis上手入门实例
- Mybatis入门实例(一)
- mybatis 入门实例
- mybatis入门实例
- Mybatis入门实例
- MyBatis入门实例
- MyBatis经典入门实例
- nodeJs+express+mongoDB开发个人博客
- 百度ocr文字识别编码时遇到的错误
- Unity 编辑器开发 知识点 持续更新
- 系统学习机器学习之神经网络(十) --BAM网络
- ipynb文件打开方式
- MyBatis入门实例
- servlet教程
- windows socket 客户端
- tableView为UITableViewStyleGrouped时,组与组之间会有一点间隙
- POI使用:用poi接口不区分xls/xlsx格式解析Excel文档(41种日期格式解析方法,5种公式结果类型解析方法,3种常用数值类型精度控制办法)
- Linux系统中‘dmesg’命令处理故障和收集系统信息的7种用法
- 【B2B】【Hotel】Hotel TV应用框架分析和评价
- RecyclerView下拉刷新、上拉加载框架<一>
- 截取车辆正样本