设为首页 收藏本站
查看: 1093|回复: 0

[经验分享] Mybatis教学-搭建Spring+Mybatis环境

[复制链接]

尚未签到

发表于 2016-11-24 06:27:41 | 显示全部楼层 |阅读模式
  在网上找了一个很不错的Mybatis框架的入门学习,讲解的很详细,非常适合初学者了解
  转载自:http://www.blogjava.net/davidjefiny/
最近抽空学习了Mybatis这个框架,在学习的过程中也找了很多的文章,个人感觉官网上的东西太多太杂,不适合许多希望一步步快速上手的朋友们,当然觉得查阅问题的时候可以直接通过官网找还比较快或者是StackOverflow,鉴于此原因把自己想把自己学习过程中的经验留作笔记以供分享参考之用,尽量少绕弯路。因为想直接了解Mybatis的使用方式,而网上有许多学习文章是Mybatis与Spring的结合范例,或者说直接在Web Project项目下创立的范例,感觉对于只是纯粹想了解那个东西怎么使用的朋友应该不需要那么多附加的条件,所以本系列中直接用最简单的Java Project作范例演示。
  什么是Mybatis,前身iBatis(个人没用过,所以没什么发言权),引述官网的原意来说,Mybatis是支持普通SQL查询,可以更简单直接的操作SQL,存储过程和高级映射的一种优秀的持久层框架,使用它基本可以消除所有的JDBC大麦和参数的手工设置以及结果集的检索,其实个人使用下来感觉,其实主要工作都是在配置XML或者注解上,然后将接口和Java的POJO(普通Java对象映射成数据库的记录),个人没用过Java的Hb,所以对于两者之间的差异性也没权限发表意见,我相信各个事物的产生总有它自己的目的。
  这段时间学习下来,其实对Mybatis来说主要的过程无法是以下几步
  1. 从XML配置文件中获取SessionFactory,然后由SessionFactory产生相应的Session。
  2. 是用Session对象对业务数据完成相应的CRUD操作(增删改查)和相应的事务控制。
  3. 使用完毕后关闭相应的Session,以免过度占用资源
  4. 使用配置相应的Mapper xml文件进行业务实体的JavaBean与数据库表之间做相应的Map操作
      
      战前准备:
  1. 开发环境Eclipse JavaEE IDE,JDK 1.6,数据库mysql 5.5
  2. 下载相应Jar包,以备后用
  mybatis-3.2.3.zip解压后拿出mybatis-3.2.3.jar,=>下载地址: http://code.google.com/p/mybatis/ (Mybatis核心包)
    mybatis-generator-core-1.3.1.jar=>下载地址: http://code.google.com/p/mybatis/wiki/Generator (Mybatis自动生成配置文件包)
    mysql-connector-java-5.1.26-bin.jar=>下载地址:http://dev.mysql.com/downloads/connector/j/ (Mysql 的jdbc驱动包)
  
  接下来大家可以再Eclipse下面建一个名为MybatisDemo的Java Project项目,按照如下图中所示新建相应的包结构和文件夹结构,其中config与mapper分别为文件夹,
  包david.mybatis.demo与包david.mybatis.model下分别存放相应的demo运行程序与Javabean对象,lib文件夹下存放刚刚下载的那几个第三方jar包。
             DSC0000.png
  
  建完下面的目录,我们可以添加相应的Jar包,如下图
   DSC0001.png DSC0002.png
   完成后,执行下面SQL,建立DEMO所需的表结构,分别有3张表,Visitor(访问者表),Website(网站表),Channel(频道表)
 

--创建Visitor
CREATE TABLE Visitor
(
Id INT(11) NOT NULL AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
Email VARCHAR(1000) NOT NULL,
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime,
PRIMARY KEY(Id)
)
--创建网站表
CREATE TABLE Website
(
Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
VisitorId INT REFERENCES Visitor(Id),
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime
)
--创建频道表
CREATE TABLE Channel
(
Id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(1000) NOT NULL,
WebsiteId INT REFERENCES Website(Id),
Status INT NOT NULL DEFAULT 1,
CreateTime DateTime
)
  所有这些都完成后,我们就要开始动手啦~
 
       就像开头说的,Mybatis的所有配置都源于一份XML配置文件,我们需要在config文件夹下,新建名为mybatis_demo_config.xml的配置文件,这一份东西就是我们后面所需要操作的核心之一。
       在配置这个文件千万要注意<configuration>节点内的元素都是有层级顺序的要求的,不能够随意更换次序,否则在加载xml配置文件的时候会出现异常而导致后续操作不成功。
具体的节点说明大家可以查看http://mybatis.github.io/mybatis-3/zh/configuration.html#,这里只说比较常用的节点,typeAliases,environments,mappers。
       1. typeAliases => 别名节点,可以通过设置这个节点的属性,这样配置文件中其他需要实体名字的地方都可以使用此别名而不是完全限定名,例如 <typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
       2. environments => 环境节点,配置数据连接相关的信息
       3. mappers => 配置SQL映射语句。
       最简单的配置如下:

<?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>
<typeAliases>
<typeAlias type="david.mybatis.model.Visitor" alias="Visitor" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<!-- ?useUnicode=true&amp;characterEncoding=utf8为了支持中文数据的写入 -->
<property name="url"
value="jdbc:mysql://127.0.0.1:3306/mybatis_db?useUnicode=true&amp;characterEncoding=utf8" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/VisitorMapper.xml" />
</mappers>
</configuration>
 
在包david.mybatis.demo下面新建一个名为MyBatisUtils类,里面存放获取SqlSession与关闭SqlSession的方法,提炼出来方便多次复用。

package david.mybatis.demo;
import java.io.InputStream;
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 david.mybatis.model.CRUD_Enum;
public class MybatisUtils {
private static final String CONFIG_PATH = "config/mybatis_demo_config.xml";
/*
* 获取数据库访问链接
*/
public static SqlSession getSqlSession() {
SqlSession session = null;
try {
InputStream stream = Resources.getResourceAsStream(CONFIG_PATH);
//可以根据配置的相应环境读取相应的数据库环境
// SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(
// stream, "development");
SqlSessionFactory factory = new SqlSessionFactoryBuilder()
.build(stream);
session = factory.openSession();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return session;
}
/*
* 获取数据库访问链接
*/
public static void closeSession(SqlSession session) {
session.close();
}
/*
* 返回操作记录消息
*/
public static void showMessages(CRUD_Enum type, int count) {
switch (type) {
case Add:
System.out.println("添加了" + count + "条记录。");
break;
case Delete:
System.out.println("删除了" + count + "条记录。");
break;
case Update:
System.out.println("更新了" + count + "条记录。");
break;
case Query:
System.out.println("匹配了" + count + "条记录。");
break;
case List:
System.out.println("共有" + count + "条记录。");
break;
default:
break;
}
}
}
 
在包david.mybatis.model下面新建一个名为Visitor的类,用来作相应的OR Mapping。

package david.mybatis.model;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Visitor {
private int id;
private String name;
private String email;
private int status;
private Date createTime;
public Visitor() {
// TODO Auto-generated constructor stub
createTime = new Date();
}
public Visitor(String name, String email) {
this.name = name;
this.email = email;
this.status = 1;
this.createTime = new Date();
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setEmail(String email) {
this.email = email;
}
public String getEmail() {
return email;
}
public Date getCreateTime() {
return createTime;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return String.format("{Id: %d, Name: %s, CreateTime: %s}", id, name,
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
}
}
 在包david.mybatis.demo下面新建一个VisitorMapper.xml,用来映射相应SQL语句。
这里要注意namespace=>david.mybatis.demo.IVisitorOperation一定要与对应这个包下面的实际文件名,IVisitorOperation否则无法成功加载相应的映射文件
 

<mapper namespace="david.mybatis.demo.IVisitorOperation">
<!-- 此处的resultType就是对应刚刚你在typeAlias节点里面规定的别名 -->
<select id="basicQuery" parameterType="int" resultType="Visitor">
select * from visitor where id=#{id} and
Status>0 order by Id
</select>
</mapper>

接下来运行下面的程序
 

public static void testBasicQuery(int id) {
SqlSession session = MybatisUtils.getSqlSession();
try {
Visitor visitor = (Visitor) session.selectOne("david.mybatis.demo.IVisitorOperation.basicQuery", id);
MybatisUtils.closeSession(session);
System.out.println(visitor);
} catch (Exception e) {
// TODO: handle exception
}
}
 一个最简单的执行结果就出来啦
 
DSC0003.png
这算是Mybatis系列的HelloWord,下回会讲述关于使用接口的方式进行相应操作。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-304569-1-1.html 上篇帖子: SpringMVC+Spring+Mybatis整合 下篇帖子: mybatis模糊查询
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表