MyBatis入门实例
2017-01-09 17:13
633 查看
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
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- Android之获取手机上的图片和视频缩略图thumbnails
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 数据库链接字符串查询网站
- 解决mysql 开启logbin 导致存储过程报错
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)