Mybatis学习笔记(一)

     Mybatis,前身iBatis,引述官网的原意来说,Mybatis是支持普通SQL查询,可以更简单直接的操作SQL,存储过程和高级映射的一种优秀的持久层框架,使用它基本可以消除所有的JDBC大麦和参数的手工设置以及结果集的检索,其实主要工作都是在配置XML或者注解上,然后将接口和Java的POJO(普通Java对象映射成数据库的记录)。

  这段时间学习下来,其实对Mybatis来说主要的过程无法是以下几步:

  1. 从XML配置文件中获取SessionFactory,然后由SessionFactory产生相应的Session。

  2. 是用Session对象对业务数据完成相应的CRUD操作(增删改查)和相应的事务控制。

  3. 使用完毕后关闭相应的Session,以免过度占用资源

  4. 使用配置相应的Mapper xml文件进行业务实体的JavaBean与数据库表之间做相应的Map操作


 战前准备:

  1. 开发环境Eclipse JavaEE IDE,JDK 1.6,数据库 sqlserver2008

  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自动生成配置文件包)

  接下来大家可以再Eclipse下面建一个名为TestMyBatis的Java Project项目,按照如下图中所示新建相应的包结构和文件夹结构,其中config与mapper分别为文件夹,

 

            

  

  完成后,执行下面SQL,建立所需的表结构,分别有3张表,Visitor(访问者表),Website(网站表),Channel(频道表) 

建表SQL
CREATE TABLE Visitor
(
    Id  INT NOT NULL,
    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 ,
    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,
    Name VARCHAR(1000) NOT NULL,
    WebsiteId INT REFERENCES Website(Id),
    Status INT NOT NULL DEFAULT 1,
    CreateTime DateTime
)

 

       所有这些都完成后,我们就要开始动手啦~

 

       就像开头说的,Mybatis的所有配置都源于一份XML配置文件,我们需要在config文件夹下,新建名为mybatis_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配置<?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="com.yy.model.Visitor" alias="Visitor" />
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
                <!-- ?useUnicode=true&amp;characterEncoding=utf8为了支持中文数据的写入 -->
                <property name="url"
                    value="jdbc:sqlserver://localhost:1433;DatabaseName=uap63_0825" />
                <property name="username" value="sa" />
                <property name="password" value="yy19930214" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/yy/mapper/VisitorMapper.xml" />
    </mappers>
</configuration>

新建一个名为MyBatisUtils类,里面存放获取SqlSession与关闭SqlSession的方法,提炼出来方便多次复用。

MybatisUtils类
package com.yy.demo;
import java.io.IOException;
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 com.yy.model.CRUD_Enum;


public class MybatisUtils {
          private static final String CONFIG_PATH = "com/yy/config/TestMyBatis_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 (IOException e) {

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;
       }
   }
}


在新建一个名为Visitor的类,用来作相应的OR Mapping。

Visitor类
package com.yy.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() {
       
       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() {
      
    //格式化输出;
       return String.format("{Id: %d, Name: %s, CreateTime: %s}", id, name,
               new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(createTime));
   }
}


新建一个VisitorMapper.xml,用来映射相应SQL语句。

这里要注意namespace=>com.yy.demo.IVisitorOperation一定要与对应这个包下面的实际文件名,IVisitorOperation否则无法成功加载相应的映射文件

Visitormapper配置
<?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="com.yy.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 class Test {


/**
* @param args
*/
public static void main(String[] args) {
SqlSession session=MybatisUtils.getSqlSession();

Visitor visitor=session.selectOne("com.yy.demo.IVisitorOperation.basicQuery",1);
MybatisUtils.closeSession(session);
System.out.println(visitor);


}
}

 

一个最简单的执行结果就出来啦

 


这算是Mybatis系列的HelloWord,下回会讲述关于使用接口的方式进行相应操作。


易出问题:

问题一:


解决:Visitormapper.xml 加入

<?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">


问题二:找不到driver类;

No suitable driver found for jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=uap63_0825

解决:引用错了。
sql2000
com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://<server>:<port>;DatabaseName=<database>
3个文件:
msbase.jar
mssqlserver.jar
msutil.jar

sql2005及以后
com.microsoft.sqlserver.jdbc.SQLServerDriver
jdbc:sqlserver://<server>:<port>;DatabaseName=<database>
1个文件:
sqljdbc.jar 或者  sqljdbc4.jar





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值