mybatis开发之基本流程
来源:互联网 发布:java api文档怎么看 编辑:程序博客网 时间:2024/05/20 13:08
一、mybatis介绍
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取
结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)
映射成数据库中的记录。说来说去mybatis本身只是一个数据库的操作工具(框架),他的优点就是通过配置XML文件以及映射的方式来对数据库进行
操作。
二、准备工作
1.首先还是准备一下需要的jar包,mybatis需要jar包合集进行下载。本文使用IDEA开发工具,相较于eclipse本人还是喜欢这个新一点的开发工具,界面
什么的要更养眼一些。
2.首先创建一个javaEE文件
直接下一步,
这一步可以不需要打对号,因为没有用到web内容。紧接着下一步
至此java工程创建完毕,创建以后的工程目录如下
我们需要创建一个lib根目录,创建完成以后,需要对工程结构进行配置,点击快捷工具栏project structure,选择左侧的library如下图,把lib文件夹作为
工程java依赖文件目录。
下一步需要创建一个作为resource文件的根目录,这里面我创建了一个config的目录,作为resource文件目录,如下图修改过程
到此,目录结构就完成了,需要将mybatis需要的所有jar包放到lib文件夹下面。完成以后的工程目录如下图:
三、开始开发
1.首先在config目录下面创建一个sqlmap文件夹,用来存放数据库属性(*.properties)文件以及映射文件(.xml)。
数据库属性配置文件mysql.properties如下
jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/testdb1jdbc.username=rootjdbc.password=123456
配置一些数据库的基本参数,即数据库地址,使用的账户的用户名,密码。
映射文件取名为user.xml(因为我要操作一个user表),待我们把下一步配置mybatis全局文件配置好以后再来说这个文件。
2.然后在config目录下创建一个XML配置文件,取名SqlMapConfig.xml,这是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> <!-- 引入外部配置文件 --> <properties resource="./sqlmap/mysql.properties"></properties> <!-- 为JAVA Bean起类别名 --> <typeAliases> <!-- 别名方式1,一个一个的配置 type中放置的是类的全路径,alias中放置的是类别名 <typeAliase type="com.cy.mybatis.beans.UserBean" alias="UserBean"/> --> <!-- 别名方式2,批量定义别名,自动扫描包中的po类,将JAVA类的类名作为类的类别名(常用此方式) --> <package name="com.test.po"/> </typeAliases> <!-- 配置mybatis运行环境 --> <environments default="development"> <environment id="development"> <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 --> <transactionManager type="JDBC"/> <!-- mybatis提供了3种数据源类型,分别是:POOLED,UNPOOLED,JNDI --> <!-- POOLED 表示支持JDBC数据源连接池 --> <!-- UNPOOLED 表示不支持数据源连接池 --> <!-- JNDI 表示支持外部数据源连接池 --> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <!--加载映射文件--> <mappers> <!--加载映射文件方式1,一个一个的配置--> <mapper resource="./sqlmap/User.xml"/> <!-- 加载映射文件方式2,自动扫描包内的Mapper接口与配置文件 规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,而且必须在一个文件夹中,并且接口使用的是mapper代理方法--> <!--<package name="com.test.mapper"/>--> </mappers></configuration>顺便把log4j.properties文件配置一下(config下创建此文件,目的是使用log),内容如下:
# Global logging configurationlog4j.rootLogger=DEBUG, stdout # MyBatis logging configuration...log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output...log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n需要注意的是log4j.rootLogger=DEBUG,测试的时候使用debug生产环境改为error.
3.映射文件的配置(user.xml)
这种方式是普通接口开发方式,即写dao接口和dao的实现类,另一种是mapper代理开发的方式(具体在另一篇博客讲述)
<?xml version="1.0" encoding="UTF-8"?><!-- 不写会报错 --><!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><!--namespace命名空间,作用就是对sql进行分类化管理,理解sql隔离注意:使用mapper代理开发方法,namespace有特殊重要的作用--><mapper namespace="test"> <!--在映射文件中配置很多sql语句--> <!--需求:通过id查询用户表的记录--> <!--通过select查询数据库--> <!--id:标志映射文件中的sql,讲sql封装到mappedStatement对象中,所以将id成为statement的id--> <!--parameterType指定输入参数的类型--> <!--resultType指定sql输出映射结果的java对象类型--> <select id="findUserById" parameterType="int" resultType="com.test.po.User" > SELECT * FROM USER WHERE id = #{id} </select> <!--带有${}这种形式的是将传入的参数不加修饰的直接加入sql语句,但是要注意sql注入的问题,所以必须写value这个名称--> <select id="findUserByName" parameterType="String" resultType="com.test.po.User"> SELECT * FROM USER WHERE username LIKE CONCAT(CONCAT('%', #{value}), '%'); </select> <!--插入用户--> <insert id="insertUser" parameterType="com.test.po.User">-- 将插入的最后一条数据的主键返回给要插入的对象user中,此方法只对主键自增有效 <selectKey keyProperty="id" order="AFTER" resultType="int"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO USER(username,password,sex,address) VALUES (#{username},#{password},#{sex},#{address}) </insert> <!--插入用户 针对于主键非自增的表格 需要用UUID()方法将主键返回添加到user对象中--> <!--<insert id="insertUser" parameterType="com.test.po.User">--> <!---- 将插入的最后一条数据的主键返回给要插入的对象user中,此方法只对主键自增有效--> <!--<selectKey keyProperty="id" order="BEFORE" resultType="String">--> <!--SELECT UUID()--> <!--</selectKey>--> <!--INSERT INTO USER(id,username,password,sex,address) VALUES (#{id},#{username},#{password},#{sex},#{address})--> <!--</insert>--> <!--删除用户记录--> <delete id="deleteUserByName" parameterType="String"> DELETE FROM USER WHERE username = #{username} </delete> <!--删除用户记录通过id--> <delete id="deleteUserById" parameterType="int"> DELETE FROM USER WHERE id = #{id} </delete> <!--更新用户信息--> <update id="updateUser" parameterType="com.test.po.User"> UPDATE USER SET username=#{username},password=#{password},sex=#{sex},address=#{address} WHERE id=#{id} </update></mapper>对应的user类
public class User { private int id; private String username; private String password; private String sex; private String address; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "User{" + "id=" + id + ", username='" + username + '\'' + ", password='" + password + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + '}'; }}dao接口以及实现类
public interface UserDao { /** * 根据id查询User表记录 * @param id * @return * @throws Exception */ public User findUserById(int id) throws Exception; /** * 向User表添加记录 * @param user * @throws Exception */ public void insertUser(User user) throws Exception; /** * 删除user表中的记录 * @param id * @throws Exception */ public void deleteUser(int id) throws Exception;}实现类
public class UserDaoImp implements UserDao{ private final SqlSessionFactory sessionFactory; //需要向dao接口实现类中注入SqlSessionFactory,通过构造方法注入 public UserDaoImp(SqlSessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public User findUserById(int id) throws Exception { SqlSession sqlSession = null; try { sqlSession = sessionFactory.openSession(); User user = sqlSession.selectOne("test.findUserById",id); return user; } catch (Exception e) { e.printStackTrace(); }finally { sqlSession.close(); } return null; } @Override public void insertUser(User user) throws Exception { SqlSession sqlSession = null; try { sqlSession = sessionFactory.openSession(); sqlSession.insert("test.insertUser",user); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); }finally { sqlSession.close(); } } @Override public void deleteUser(int id) throws Exception { SqlSession sqlSession = null; try { sqlSession = sessionFactory.openSession(); sqlSession.delete("test.deleteUserById",id); sqlSession.commit(); } catch (Exception e) { e.printStackTrace(); }finally { sqlSession.close(); } }}小结:以上就是对一个user表使用mybatis框架开发的小案例,其中代理接口使用实现类来操作,下一篇紧接着本篇写另外
一种mapper接口,不需要实现类的操作方法.(详情请移步:使用mapper接口开发,无需实现类操作增删改查).
- mybatis开发之基本流程
- Mybatis基本流程介绍
- Android之蓝牙 开发基本流程
- Mybatis开发流程
- Mybatis开发流程简介
- Mybatis上路_01-基本流程
- Mybatis实现【2】--基本流程
- jdbc,hibernate,mybatis基本流程
- 项目开发流程(基本流程)
- 项目开发基本流程
- 软件开发基本流程
- struts基本开发流程
- Android 基本开发流程
- web开发基本流程
- 软件开发基本流程
- NDK开发基本流程
- Mybatis之基本简介
- iOS开发之xml数据解析的基本流程
- 读入输出优化 黑科技 快过fread&&fwite
- BNN
- html从入门到放弃(4)-图片与图片的全链接和部分链接
- 御见安全态势感知:“哈里男孩”水坑攻击“脚本小子”
- TCP和UDP区别
- mybatis开发之基本流程
- 【高维前缀和】Codeforces165E[Compatible Numbers]题解
- 模仿动物行走的腿式机器人是未来发展趋势吗?
- Spring中提供的util CollectionUtils
- 关于extern关键字的解析
- 关于OpenGL的各个坐标系的理解(推荐一些别人的好文)
- Eclipse自动下载源码--Java Source Attacher插件
- 起床
- MaterialEditText的使用:输入框