01 Mybatis应用篇---Mybatis入门

什么是Mybtis?
     官方自己介绍说:“MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以对配置和原生Map使用简单的 XML 或注解,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。”
     为了方便,我使用了maven构建项目。
Mybatis环境搭建及简单实例:
1、环境搭建
     将下面dependency代码置于pom.xml中
<dependency>
 
<groupId> org.mybatis </groupId>
 
<artifactId> mybatis </artifactId>
  <version> x.x.x </version>
</dependency>
2、配置log4j和Mybatis
     在classpath建立一个log4j的配置文件log4j.properties,再建立一个用于配置Mybatis的配置文件mybatis-config.xml文件。mybatis-config配置如下
<? 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配置文件, 我这里面配置的是数据库相关 -->
    <properties  resource ="dbconfig.properties" ></properties>
    <settings>
        <!--指定 MyBatis 所用日志的具体实现,未指定时将自动查找。-->
        <setting  name ="logImpl"  value ="LOG4J" />
    </settings>

    <typeAliases>
        <!--定义别名 类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。-->
        <typeAlias  type ="hzq.mybatis.source.demo1.entity.User"  alias ="User" />
        <typeAlias  type ="hzq.mybatis.source.demo1.dao.IUserDao"  alias ="UserMapper" />
    </typeAliases>
    <environments  default ="development" >
        <environment  id ="development" >
            <transactionManager  type ="JDBC" />
            <dataSource  type ="POOLED" >
                <!-- 上面指定了数据库配置文件, 配置文件里面也是对应的这四个属性 -->
                <property  name ="driver"  value ="${driver}" />
                <property  name ="url"  value ="${url}" />
                <property  name ="username"  value ="${username}" />
                <property  name ="password"  value ="${password}" />
            </dataSource>
        </environment>
    </environments>
    <!--映射文件-->
    <mappers>
        <mapper  resource ="hzq/mybatis/source/demo1/UserMapper.xml" />
    </mappers>
</configuration>
3、简单实例:
①、首先,在mysql数据库mybatis中创建一张sys_users表;
CREATE TABLE `sys_users` (
  `userno`  int( 11NOT NULL AUTO_INCREMENT COMMENT  '用户序号' ,
  `loginname`  varchar( 64DEFAULT NULL COMMENT  '登陆名' ,
  `passwd`  varchar( 64DEFAULT NULL COMMENT  '密码' ,
  `username`  varchar( 64DEFAULT NULL COMMENT  '姓名' ,
  `job`  varchar( 64DEFAULT NULL COMMENT  '职务' ,
  `phone`  varchar( 32DEFAULT NULL COMMENT  '电话' ,
  `createtime`  datetime DEFAULT NULL COMMENT  '创建时间' ,
  `lastlgntime`  datetime DEFAULT NULL ,
  PRIMARY KEY ( `userno`)
ENGINE=InnoDB  AUTO_INCREMENT= DEFAULT CHARSET=utf8  ROW_FORMAT= COMPACT ;


②、包目录结构如下:


③编写一个User实体类
public class User {
    private String  userno ;
    private String  loginname ;
    private String  passwd ;
    private String  username ;
    private String  job ;
    private String  phone ;
    private String  createtime ;
    private String  lastlgntime ;

    public String  getUserno() {
        return  userno ;
    }

    public void  setUserno(String userno) {
        this. userno = userno ;
    }

    public String  getLoginname() {
        return  loginname ;
    }

    public void  setLoginname(String loginname) {
        this. loginname = loginname ;
    }

    public String  getPasswd() {
        return  passwd ;
    }

    public void  setPasswd(String passwd) {
        this. passwd = passwd ;
    }

    public String  getUsername() {
        return  username ;
    }

    public void  setUsername(String username) {
        this. username = username ;
    }

    public String  getJob() {
        return  job ;
    }

    public void  setJob(String job) {
        this. job = job ;
    }

    public String  getPhone() {
        return  phone ;
    }

    public void  setPhone(String phone) {
        this. phone = phone ;
    }

    public String  getCreatetime() {
        return  createtime ;
    }

    public void  setCreatetime(String createtime) {
        this. createtime = createtime ;
    }

    public String  getLastlgntime() {
        return  lastlgntime ;
    }

    public void  setLastlgntime(String lastlgntime) {
        this. lastlgntime = lastlgntime ;
    }



}

④编写IUserDao接口类:
public interface IUserDao {
    /**
     * 新增
     */
    public void  insert(User user) ;

    /**
     * 获取所有的数据
     *  @return
      */
    public List<User>  list() ;

    /**
     * 根据id更新
     *  @param  user
      */
    public void  update(User user) ;
}

⑤编写UserDaoImpl实现类

public class UserDaoImpl  implements IUserDao {
    @Override
    public void  insert(User user) {
        SqlSession session =  this.getSqlSessionFactory().openSession() ;
        session.insert( "UserMapper.insert" ,user) ;
        session.commit() ;
        session.close() ;

    }

    @Override
    public List<User>  list() {
        SqlSession session  =  this.getSqlSessionFactory().openSession() ;
        List<User> users = session.selectList( "UserMapper.list") ;
        session.close() ;
        return users ;
    }

    @Override
    public void  update(User user) {
        SqlSession session =  this.getSqlSessionFactory().openSession() ;
        session.update( "UserMapper.update" ,user) ;
        session.commit() ;
        session.close() ;
    }

    /**
     * 获取 SqlSessionFactory
     * Mybatis 通过SqlSessionFactory获取SqlSession, 然后才能通过SqlSession与数据库进行交互
     *  @return
      */
    private SqlSessionFactory  getSqlSessionFactory(){
        String resource =  "mybatis-config.xml" ;
        SqlSessionFactory sqlSessionFactory =  null;
        InputStream stream =  null;
        try {
            stream = Resources. getResourceAsStream(resource) ;
            sqlSessionFactory =  new SqlSessionFactoryBuilder().build(stream) ;
        } catch (Exception e){
            e.printStackTrace() ;
        }
        return  sqlSessionFactory ;
    }
}

⑥编写UserMapper文件
<? 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 ="UserMapper" >
    <sql  id ="tableName" >
        sys_users
    </sql>
    <sql  id ="field" >
         userno,
         loginname,
         passwd,
         username,
         job,
         phone,
         createtime,
         lastlgntime
    </sql>
    <sql  id ="fieldValue" >
         #{userno},
         #{loginname},
         #{passwd},
         #{username},
         #{job},
         #{phone},
         #{createtime},
         #{lastlgntime}
    </sql>
    <insert  id ="insert"  parameterType ="User" >
        INSERT  INTO
            <include  refid ="tableName" ></include>
        (
            <include  refid ="field" ></include>
        )VALUES (
            <include  refid ="fieldValue" ></include>
        )

    </insert>
    <select  id ="list"  resultType ="User" >
        SELECT
        <include  refid ="field" ></include>
        FROM
        <include  refid ="tableName" ></include>

    </select>
    <update  id ="update"  parameterType ="User" >
        UPDATE
        <include  refid ="tableName" />
        SET
        job = #{job}
        WHERE
        userno = #{userno}

    </update>
</mapper>

⑦编写测试类
public class UserTest {
    private IUserDao  userDao new UserDaoImpl() ;
    /**
     * 新增数据
     */
    @Test
    public void  save(){
        User user =  new User() ;
        user.setLoginname( "admin") ;
        user.setPhone( "110") ;
        user.setPasswd( "admin") ;
        user.setJob( "码农") ;
        DateFormat df =  new SimpleDateFormat( "yy-MM-dd HH:mm:ss") ;
        user.setCreatetime(df.format( new Date())) ;
        user.setLastlgntime(df.format( new Date())) ;
        userDao.insert(user) ;
    }
    /**
     * 根据id更新
     */
    @Test
    public void  update(){
        User user =  new User() ;
        user.setUserno( 2+ "") ;
        user.setJob( "Java工程师") ;
        userDao.update(user) ;
    }
    /**
     * 查询所有的数据
     */
    @Test
    public void  list(){
        List<User> users =  userDao.list() ;
        for (User u: users
             ) {
            System. out.println(u.getJob()) ;
        }
    }
}

4、demo源码下载链接:
          https://code.csdn.net/mmd0308/mybatis-source.git 
通过这个简单的demo,初步了解Mybatis 的运行机制。接下来进行深一步的了解和学习Mybatis。









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值