MyBatis初探

下载

到github上下载MyBatis的jar包,点击这里,到github上查看各个版本,选择相应版本进行下载,由于网速过慢,多次下载失败,我选择了去 csdn上下载了个jar包,版本为3.2.3。除此之外还需要导入JDBC包,下载地址点击这里。导包的方式详见Eclipse引入jar包的三种方式,推荐使用user lib的方式添加。工程结构如下:

1.创建配置文件

1.1 创建mysql配置文件mysql.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://192.168.1.44/test
jdbc.username=root
jdbc.password=rancho945

上面分别配置了数据库驱动,数据库连接和帐号密码。值得注意的是,在生产环境中,为了安全起见,不能直接用root用户,而是根据实际情况,分配相应的用户及其权限进行数据库的连接。这里是为了演示方便,直接用root。如果是用Linux,iptables有时候会拦截连接,如果iptables玩得不6的朋友,在测试环境中可以把iptables暂时关闭,并且在mysql中设置root用户开放给局域网访问。

1.2 创建MyBatis配置文件mybatis.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="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="com/rancho945/DB/mapper/UserMapper.xml"/>-->
        <!-- 告知映射文件方式2,自动扫描包内的Mapper接口与配置文件 -->
        <package name="com/rancho945/DB/mapper"/>
    </mappers>
</configuration>

在properties节点引入了上面的mysql.properties文件,这样就可以在该文件中,通过 使propertiesdataSource使 {jdbc.username}为mysql.properties中的用户名配置。

为了引入的方便,这mysql.properties和mybatis.cfg.xml都要放在src目录下

2. 创建数据表

为了演示,创建一个非常简单的数据表t_user:

create table t_user(
id int not null primary key auto_increment,
username varchar(60) not null,
password varchar(40) not null
);

3. 创建实体类

实体类UserBean.java中的属性要和数据表t_user中的数据列一致(事实上是可以不一致的,可以通过mapper文件灵活配置)

package com.rancho945.DB.bean;

import java.io.Serializable;

public class UserBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String username;
    private String password;

    public UserBean() {

    }

    public UserBean(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer 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;
    }

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

4. 创建映射接口

数据映射接口UserMapper.java定义了对数据表t_user的增删查改功能:

package com.rancho945.DB.mapper;

import java.util.List;

import com.rancho945.DB.bean.UserBean;

public interface UserMapper {
    /**
     * 新增用戶
     * @param user
     * @return
     * @throws Exception
     */
    public int insertUser(UserBean user) throws Exception;
    /**
     * 修改用戶
     * @param user
     * @param id
     * @return
     * @throws Exception
     */
    public int updateUser (UserBean user,int id) throws Exception;
     /**
      * 刪除用戶
      * @param id
      * @return
      * @throws Exception
      */
    public int deleteUser(int id) throws Exception;
    /**
     * 根据id查询用户信息
     * @param id
     * @return
     * @throws Exception
     */
    public UserBean selectUserById(int id) throws Exception;
     /**
      * 查询所有的用户信息
      * @return
      * @throws Exception
      */
    public List<UserBean> selectAllUser() throws Exception;
}

5. 创建接口映射文件

接口映射文件定义了数据映射接口的操作以及实体类的映射关系,下面为UserMapper的映射

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org/DTD Mapper 3.0" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.rancho945.DB.mapper.UserMapper">
<!-- 自定义返回结果集 -->
   <resultMap id="userMap" type="com.rancho945.DB.bean.UserBean">
        <id property="id" column="id" javaType="java.lang.Integer"></id>
        <result property="username" column="username" javaType="java.lang.String"></result>
        <result property="password" column="password" javaType="java.lang.String"></result>
    </resultMap>
<!-- 在各种标签中的id属性必须和接口中的方法名相同 , id属性值必须是唯一的,不能够重复使用。parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型-->    
<!-- useGeneratedKeys:( 仅 对 insert 有 用 ) 这 会 告 诉 MyBatis 使 用 JDBC 的getGeneratedKeys 
            方法来取出由数据(比如:像 MySQL 和 SQLServer 这样的数据库管理系统的自动递增字段)内部生成的主键。默认值: false。 -->    
<!--keyProperty: (仅对 insert有用)标记一个属性, MyBatis 会通过 getGeneratedKeys或者通过 insert 语句的 selectKey 子元素设置它的值。默认:不设置。 -->
<!--#{}中的内容,为占位符,当参数为某个JavaBean时,表示放置该Bean对象的属性值  -->
    <insert id="insertUser" useGeneratedKeys="true" keyProperty="id">
        insert into t_user (username,password) values (#{username},#{password})
    </insert>
    <update id="updateUser" >
      update t_user set username=#{username},password=#{password} where id=#{id}
    </update>

    <delete id="deleteUser" parameterType="int">
     delete from t_user where id=#{id}  
    </delete>

    <select id="selectUserById" parameterType="int" resultMap="userMap">
     select * from t_user where id=#{id}
    </select>

    <select id="selectAllUser" resultMap="userMap">
     select * from t_user
    </select>
</mapper>

映射文件详细配置,可参考xml映射文件

6.工具类

用于创建SqlSession的工具类DBUTools

package com.rancho945.DB.tools;

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 DBTools {
     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();
        }
}

7.测试类

UserTest.java

package com.rancho945.DB.test;

import java.util.List;

import org.apache.ibatis.session.SqlSession;

import com.rancho945.DB.bean.UserBean;
import com.rancho945.DB.mapper.UserMapper;
import com.rancho945.DB.tools.DBTools;

public class UserTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        insertUser();
        selectUserById();
        selectAllUser();
        deleteUser();
    }

    /**
     * 新增用户
     */
    private static void insertUser() {
        SqlSession session = DBTools.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        UserBean user = new UserBean("ffff", "1314520");
        try {
            mapper.insertUser(user);
            System.out.println(user.toString());
             session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }


    /**
     * 删除用户
     */
    private static void deleteUser(){
        SqlSession session=DBTools.getSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        try {
            mapper.deleteUser(1);
            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }


    /**
     * 根据id查询用户
     */
    private static void selectUserById(){
        SqlSession session=DBTools.getSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        try {
        UserBean user=    mapper.selectUserById(2);
        System.out.println(user.toString());

            session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }

    /**
     * 查询所有的用户
     */
    private static void selectAllUser(){
        SqlSession session=DBTools.getSession();
        UserMapper mapper=session.getMapper(UserMapper.class);
        try {
        List<UserBean> user=mapper.selectAllUser();
        System.out.println(user.toString());
        session.commit();
        } catch (Exception e) {
            e.printStackTrace();
            session.rollback();
        }
    }

}

参考资料:Mybatis参考文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值