mybatis教程

目录

  1. mybatis环境搭建

  2. mybatis的CRUD操作

  3. mybatis反向工程


一.mybatis环境搭建

所需jar包:mybatis-3.2.2.jar和mysql-connection-java-5.1.29.jar

1.建立项目所需的数据库:

DROP DATABASE IF EXISTE `mybatis`;
CREATE DATABASE `mybatis`;
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL,
  `password` varchar(40) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.建立项目并导入jar包:项目除了mybatis没有用其它框架,用原生的servlet来写吧。

这里写图片描述

3.配置mybatis.cfg.xml

3.1这里先配置mysql.properties,将和数据连接有关的数据放进去,增加代码重用性。

这里写图片描述

3.2mybatis.cfg.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>

  <!-- 引入外部配置文件 -->
  <properties resource="mysql.properties"></properties>

   <!-- 配置mybatis运行环境 -->
     <environments default="cybatis">
        <environment id="cybatis">
            <!-- 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="com/cy/mybatis/mapper/UserMapper.xml"/>-->
        <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
        <package name="com/xxx/mapper"/>
    </mappers>
</configuration>

4.配置DBTool工具类:用来加载配置文件,得到sessionFactory,开启session

package com.xxx.tool;

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;

public class DBTool {
    public static SqlSessionFactory sessionFactory;

    static{
        try {
            //使用MyBatis提供的Resources类加载mybatis的配置文件
            Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
            //构建sqlSession的工厂
            sessionFactory = new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    //创建能执行映射文件中sql的sqlSession
    public static SqlSession getSession(){
        return sessionFactory.openSession();
    }
}

二.mybatis的CRUD

完成了上面的配置,其实mybatis环境已经搭建好了,接下是使用的方法,也就是增删改查。(我就只介绍insert吧,其它只是sql语句不一样)

1.编写UserDTO.java,UserDTO是对数据的封装。它实现Serializable接口,且要重写toString方法,字段最好与数据库表中字段保持一致

Serializable表示这个类可以被序列化,告诉JVM这个类可以进行持久化操作

重写toString为了更好的输出到控制台方便调试,具体参考《阿里巴巴Java开发手册》

package com.xxx.bean;

import java.io.Serializable;

public class UserDTO implements Serializable{
    private static final long serialVersionUID = 1L;
    private int id;
    private String username;
    private String password;

    @Override
    public String toString() {
        return "id = " +id+ " username = " + username + " password = " + password;
    }

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

2.然后在UserMapper中写出具体的方法名和sql语句。

这里的方法不需要我们来写,所以写成了接口。

sql语句可以写到xml配置文件中,或者直接用注解写在方法上面。

写到xml配置文件中可控性更好,功能更强大一些,反向工程生成的也是配置文件,但是繁琐,网上的教程很多。

这里我用简洁很多的注解方式。

package com.xxx.mapper;

import org.apache.ibatis.annotations.Insert;

import com.xxx.bean.UserDTO;

public interface UserMapper {
    /**
     * 新增用户
     * @param user
     * @return
     * @throws Exception
     */
    @Insert("Insert into user (username,password) values(#{username},#{password})")
    int saveUser(UserDTO user) throws Exception;
}

这里是单参的形式,多参数要加点其它注解。例如

/**
     * 根据旧密码更新 密码
     * @param user
     * @return
     * @throws Exception
     */
    @Update("update user set password=#{pwd} where username=#{user.username} and password=#{user.password}")
    //在方法的参数前添加@Param('参数名')
    boolean updateUserPwd(@Param("pwd")String pwd,@Param("user")UserDTO user) throws Exception;

3.在SaveUserServlet中调用UserMapper中的方法。

package com.xxx.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.ibatis.session.SqlSession;

import com.xxx.bean.UserDTO;
import com.xxx.mapper.UserMapper;
import com.xxx.tool.DBTool;

public class SaveUserServlet extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //获取jsp中提交的参数
        String username=req.getParameter("username");
        String password=req.getParameter("password");
        //封装数据
        UserDTO user = new UserDTO();
        user.setUsername(username);
        user.setPassword(password);
        //从DBTool工具类中获取session
        SqlSession session = DBTool.getSession();
        //通过session的getMapper方法实例化UserMapper接口
        UserMapper mapper = session.getMapper(UserMapper.class);
        //调用saveUser方法,将user持久化
        try {
            boolean result = mapper.saveUser(user);
            //手动提交事务
            session.commit();
            //如果持久化成功,返回user类到jsp中显示出来
            if (result){
                req.setAttribute("info",user);
            }else {
                req.setAttribute("info","持久化失败");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            //回滚
            session.rollback();
        }
        //session不是线程安全的,使用完后要关闭
        session.close();
        //跳转到index.jsp
        req.getRequestDispatcher("/index.jsp").forward(req,resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }

}

然后配置web.xml(前面忘记了…)

<servlet>
    <servlet-name>save</servlet-name>
    <servlet-class>com.xxx.servlet.SaveUserServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>save</servlet-name>
    <url-pattern>/saveUser</url-pattern>
</servlet-mapping>

4.register.jsp中的注册表单和index.jsp中显示返回的info

<!-- register.jsp -->
<body>
    <form action="saveUser" method="post">
        UserName:<input type="text" name="username"><br/>
        PassWord:<input type="password" name="password"><br/>
        <input type="submit" value="注册">
    </form>
</body>

<!-- index.jsp -->
<body>
    ${requestScope.info} 
</body>

5.测试一下

输入用户名和密码
这里写图片描述

跳转成功
这里写图片描述

果然数据库里也有了
这里写图片描述

其它的操作就是改改sql语句和方法名,就不多写了。

三.mybatis的反向工程

反向工程工具包:https://pan.baidu.com/s/1slRM4yh
mybatis有很多方法,我这里用的是generator工具

generator使用很简单,只需要修改配置文件之后用cmd运行一行代码就可以了。这些在百度云的工具包中都有。

1.修改配置文件,使generator能找到需要自动生成的数据库表和存放位置。

这些在配置文件的注解中有很详细的说明。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动包位置 --><!-- 需修改 -->
    <classPathEntry location="C:\Users\Administrator\Desktop\Word\Tool\generator\mysql-connector-java-5.1.22-bin.jar" />
    <!-- <classPathEntry location="C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar" /> -->
    <context id="DB2Tables" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="true" />
        </commentGenerator>
        <!-- 数据库链接URL、用户名、密码 --><!-- 需修改 -->
         <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3308/mybatis" userId="root" password="123456"> 
        <!--<jdbcConnection driverClass="oracle.jdbc.driver.OracleDriver" connectionURL="jdbc:oracle:thin:@localhost:1521:orcl" userId="msa" password="msa">-->
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false" />
        </javaTypeResolver>
        <!-- 生成模型的包名和位置 --><!-- 需修改 -->
        <javaModelGenerator targetPackage="cwj.bean" targetProject="C:\Users\Administrator\Desktop\Word\Tool\generator\src">
            <property name="enableSubPackages" value="true" />
            <property name="trimStrings" value="true" />
        </javaModelGenerator>
        <!-- 生成的映射文件包名和位置 --><!-- 需修改 -->
        <sqlMapGenerator targetPackage="cwj.mapper" targetProject="C:\Users\Administrator\Desktop\Word\Tool\generator\src">
            <property name="enableSubPackages" value="true" />
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置 --><!-- 需修改 -->
        <javaClientGenerator type="XMLMAPPER" targetPackage="cwj.dao" targetProject="C:\Users\Administrator\Desktop\Word\Tool\generator\src">
            <property name="enableSubPackages" value="true" />
        </javaClientGenerator>
        <!-- 要生成那些表(更改tableName和domainObjectName就可以) -->
        <!-- <table tableName="tbug" domainObjectName="Bug" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
        <!-- <table tableName="tmenu" domainObjectName="Menu" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
        <!-- <table tableName="tonline" domainObjectName="Online" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />-->
        <!-- 需修改 -->
        <table tableName="user" domainObjectName="UserDTO" enableCountByExample="false" enableUpdateByExample="false" enableDeleteByExample="false" enableSelectByExample="false" selectByExampleQueryId="false" />
    </context>
</generatorConfiguration>

2.然后再cmd中找到generator的位置

这里写图片描述

运行生成语句中的代码
这里写图片描述

generator就会帮你自动生成文件在你选择的目录中

这里写图片描述

最后复制到你的工程中就行了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值