MyBatis简单实例

来源:互联网 发布:淘宝店铺公告写招聘 编辑:程序博客网 时间:2024/05/22 05:11

一、简介

MyBatis是支持定制化SQL、存储过程以及高级映射的优秀持久层框架。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以对配置和原生Map使用简单的XML或注解,将接口和Java的POJO(Plain Old Java Object,普通的java对象)映射成数据库的记录。

二、入门

要使用MyBatis,只需要将mybatis-x.x.x.jar文件置于classpath中即可
如果使用的是Maven来构建项目,则需要在pom.xml文件中引入MyBatis的依赖
<dependency>  <groupId>org.mybatis</groupId>  <artifactId>mybatis</artifactId>  <version>x.x.x</version></dependency>
此外还需要数据库驱动,这里以oracle数据库为例。
<!-- oracle驱动 -->   <dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>11.2.0</version></dependency>

、实例

在此先给出具体实例,具体细节后续再讨论

1、创建以Maven管理的javaWeb项目,项目结构如下

2、创建数据库表和实体类


实体
/** * 管理员对象 *  * @author zqx * */public class Admin implements Serializable {private static final long serialVersionUID = -8690258368771118331L;private Integer id;/* 登录名称 */private String loginName;private String password;/* 用户名称 */private String userName;private String status;private Date createDate;private Date lastLoginDate;public Admin() {}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public Date getCreateDate() {return createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public Date getLastLoginDate() {return lastLoginDate;}public void setLastLoginDate(Date lastLoginDate) {this.lastLoginDate = lastLoginDate;}public String getStatus() {return status;}public void setStatus(String status) {this.status = status;}@Overridepublic String toString() {return "Admin [id=" + id + ", loginName=" + loginName + ", password=" + password + ", userName=" + userName+ ", status=" + status + ", createDate=" + createDate + ", lastLoginDate=" + lastLoginDate + "]";}}

3、MyBatis的配置文件

<?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="oracle.jdbc.driver.OracleDriver" />  <property name="url" value="jdbc:oracle:thin:@192.168.8.104:1521:orcl" />  <property name="username" value="wr_push" />  <property name="password" value="wr_push" />      </dataSource>  </environment>      </environments>            <!-- mapping 文件路径配置 -->      <mappers>  <mapper resource="data/adminMapper.xml" />      </mappers>  </configuration>

4、Mapper映射文件

<?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"><mapper namespace="data.mapping.adminMapper"><resultMap type="com.batis.po.Admin" id="AdminResultMap"><id property="id" column="ID" /><result property="loginName" column="LOGIN_NAME" /><result property="password" column="PASSWORD" /><result property="userName" column="USER_NAME" /><result property="status" column="STATUS" /><result property="createDate" column="CREATE_DATE" /><result property="lastLoginDate" column="LAST_LOGIN_DATE" /></resultMap><!-- 查询管理员,根据id --><select id="getAdminByID" parameterType="Integer"resultMap="AdminResultMap">  <![CDATA[     SELECT * from ADMIN a WHERE a.ID = #{ID}  ]]></select><!-- 查询管理员列表 --><select id="getAdmin"resultMap="AdminResultMap">  <![CDATA[     SELECT * from ADMIN ]]></select><!-- 增加管理员 --><insert id="addAdmin" parameterType="com.batis.po.Admin"><![CDATA[     insert into ADMIN(ID,LOGIN_NAME,PASSWORD,USER_NAME,STATUS) values (#{id},#{loginName},#{password},#{userName},#{status})]]></insert><insert id="addAdminAuto" parameterType="admin"><selectKey resultType="long" order="BEFORE" keyProperty="id">SELECT SEQ_ADMIN_ID.NEXTVAL FROM DUAL</selectKey><![CDATA[insertinto ADMIN(ID,USER_NAME,LOGIN_NAME,PASSWORD,STATUS,CREATE_DATE)values(#{id:NUMERIC},#{userName},#{loginName},#{password},#{status},#{createDate})]]></insert><!-- 更新管理员 --><update id="updateAdmin" parameterType="com.batis.po.Admin"><![CDATA[update ADMIN set USER_NAME = #{userName},LOGIN_NAME = #{loginName} where ID = #{id}]]></update><delete id="deleteAdmin"><![CDATA[delete from ADMIN where id = #{id}]]></delete></mapper> 


5、Test类

这里测试类的只是测试基本功能,有很多可以优化和重构的地方,这里先不讨论,后续将会给出配合spring的使用的具体实例
</pre><pre name="code" class="java">/** *  */package com.batis.test;import java.io.IOException;import java.io.Reader;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import com.batis.po.Admin;/** * 测试类 *  * @author zqx * */public class BatisCRUDTest {public static void main(String[] args) throws IOException {//insert();//getByID(100);//update();delete();}/** * 获取SqlSession *  */public static SqlSession getSqlSession(String resource) throws IOException {// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xmlresource = "mybatis-config.xml";// 使用MyBatis提供的Resources类加载mybatis的配置文件(也加载关联的映射文件)Reader reader = Resources.getResourceAsReader(resource);// 构建sqlSession的工厂SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);// 构建能执行映射文件中sql语句的sqlSessionSqlSession sqlSession = sqlSessionFactory.openSession();return sqlSession;}/** * 根据ID查询管理员 */public static Admin getByID(int id) throws IOException {// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xmlString resource = "mybatis-config.xml";//获取SqlSessionSqlSession sqlSession = getSqlSession(resource);/* * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping. * adminMapper是adminMapper文件中的mapper标签的namespace属性的值 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */String statement = "data.mapping.adminMapper.getAdminByID";Admin admin = sqlSession.selectOne(statement, id);System.out.println(admin);return admin;}/** * 添加管理员 *  */public static void insert() throws IOException {// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xmlString resource = "mybatis-config.xml";//获取SqlSessionSqlSession sqlSession = getSqlSession(resource);/* * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping. * adminMapper是adminMapper文件中的mapper标签的namespace属性的值 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */String statement = "data.mapping.adminMapper.addAdmin";Admin admin = new Admin();admin.setId(100);admin.setLoginName("zhangshu");admin.setUserName("zhangshu");admin.setPassword("zhangshu");admin.setStatus("1");int row = sqlSession.insert(statement, admin);// 手动提交事务sqlSession.commit();// 使用sqlSession执行完SQL语句之后需要关闭SqlSessionsqlSession.close();System.out.println(row);}/** * 更新管理员 */public static void update() throws IOException {// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xmlString resource = "mybatis-config.xml";//获取SqlSessionSqlSession sqlSession = getSqlSession(resource);/* * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping. * adminMapper是adminMapper文件中的mapper标签的namespace属性的值 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */String statement = "data.mapping.adminMapper.updateAdmin";Admin admin = getByID(100);admin.setLoginName("zhangqingxiang");admin.setUserName("zhangqingxiang");int result = sqlSession.update(statement, admin);sqlSession.commit();sqlSession.close();System.out.println(result);}/** * 删除管理员 */public static void delete() throws IOException {// mybatis配置文件,如果把src/main/resources加入到classpath,并且配置文件放到src/main/resources目录下,则参数为mybatis-config.xmlString resource = "mybatis-config.xml";//获取SqlSessionSqlSession sqlSession = getSqlSession(resource);/* * 映射sql的标识字符串,data.mapping.adminMapper.getAdmin中的data.mapping. * adminMapper是adminMapper文件中的mapper标签的namespace属性的值 * getAdmin是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL */String statement = "data.mapping.adminMapper.deleteAdmin";int result = sqlSession.delete(statement, 100);sqlSession.commit();sqlSession.close();System.out.println(result);}}


0 0