MyBatis初探

来源:互联网 发布:seo实战密码 编辑:程序博客网 时间:2024/06/09 15:09

下载

到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.Driverjdbc.url=jdbc:mysql://192.168.1.44/testjdbc.username=rootjdbc.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