mybatis环境搭建以及CRUD操作


一、mybatis环境搭建


1.新建一个mave project

2.在pom.xml下导入jar包坐标,mybatis,mysql驱动,log4j,junit

 <packaging>jar</packaging>

<dependencies>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>

    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.26</version>
    </dependency>

    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1.3</version>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.10</version>
    </dependency>
</dependencies>

3.把log4j配置导入到main/resource下

4.在java下创建domian实体类,变量与mysql对应

public class User implements Serializable {}

5.在main/resource下创建mybatis的主配置文件:SqlMapConfig.xml,导入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>
    <!--环境配置-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/eesy"/>
                <property name="username" value="root"/>
                <property name="password" value="root"/>
            </dataSource>
        </environment>
    </environments>

    <!--配置映射文件的位置-->
    <mappers>
        <mapper resource="sise/cn/dao/IUserDao.xml"></mapper>
    </mappers>
</configuration>

6.在java/sise/sn/dao下创建IUserDao接口

/**
 * 用户的持久层接口
 */
public interface IUserDao {

    /**
     * 查询所有用户
     * @return
     */
    List<User> findAll();
}

7.创建 IUserDao的映射配置文件,在main/resource下创建于IUserDao同级目录的IUserDao.xml文件,导入map约束,并配置

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

<!--namespace确定在哪个dao接口-->
<mapper namespace="sise.cn.dao.IUserDao">
    <!--查询所有操作-->
    <!--id:dao接口中的哪个方法  resultType结果类型:封装到哪里去 -->
    <select id="findAll" resultType="sise.cn.domain.User">
        /*sql语句*/
        select * from user;
    </select>
</mapper>

8.编写测试类测试

/**
 * 测试mybatis的crud操作
 */
public class MybatisTest {

    /**
     * 测试查询所有
     */
    @Test
    public void testFindAll() throws IOException {
        //1.读取配置文件,生成字节输入流
        InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSeesion对象
        SqlSession sqlSession = factory.openSession();
        //4.获取dao的代理对象
        IUserDao userDao = sqlSession.getMapper(IUserDao.class);
        //5.执行查询所有方法
        List<User> users = userDao.findAll();
        for (User user : users) {
            System.out.println(user);
        }
        //6.释放资源
         sqlSession.close();
        in.close();
    }
}

二、保存操作


1.dao, IUserDao中添加saveUser方法

   /**
     * 用户的持久层接口
     */
    public interface IUserDao {
    
        /**
         * 查询所有用户
         * @return
         */
        List<User> findAll();
    
        /**
         * 保存方法
         * @param user
         */
        void saveUser(User user);
    }

2.在IUserDao.xml映射配置文件中添加

 <!--保存用户操作-->
    <!--parameterType:参数的类型-->
    <insert id="saveUser" parameterType="sise.cn.domain.User">
     <!--配置新增数据后,获取新增数据的id-->
    <!--keyProperty:返回的值得名称对应实体类  order:先后执行 keyColumn:id列名对应表-->
    <selectKey keyProperty="id" keyColumn="id" resultType="int" order="AFTER">
        select last_insert_id();
    </selectKey>
    
        insert into user (username,address,sex,birthday) values (#{username},#{address},#{sex},#{birthday});
    </insert>

3.在测试类中测试,把默认操作提取方法初始化

public class MybatisTest {

    private InputStream in;
    private SqlSession sqlSession;
    private IUserDao userDao;

    //定义初始化方法
    @Before//用于在测试方法执行之前执行
    public void init() throws IOException {
        //1.读取配置文件,生成字节输入流
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        //2.获取SqlSessionFactory对象
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
        //3.获取SqlSeesion对象
        sqlSession = factory.openSession();
        //4.获取dao的代理对象
        userDao = sqlSession.getMapper(IUserDao.class);
    }

    //定义释放资源方法
    @After//用于在测试方法执行之后执行
    public void destory() throws IOException {
		 //提交事务
        sqlSession.commit();
        
        //释放资源
            sqlSession.close();
            in.close();
        }


	 /**
     * 测试保存操作
     */
     @Test
    public void testSave() throws IOException {
        User user = new User();
        user.setUsername("6ms");
        user.setAddress("北京");
        user.setSex("男");
        user.setBirthday(new Date());

        //5.执行查询所有方法
        userDao.saveUser(user);

    }
}

.


三、修改和删除操作


IUserdao:

/**
     * 更新用户
      * @param user
     */
    void updateUser(User user);

    /**
     * 根据id删除用户
     * @param userId
     */
    void deleteUser(Integer userId);

IUserdao.xml:

 <!--更新用户-->
    <update id="updateUser" parameterType="sise.cn.domain.User">
        update user set username=#{username},address=#{address},sex=#{sex},birthday=#{birthday} where id=#{id};
    </update>
    
    <!--删除用户-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where id=#{id}
    </delete>

test:

  /**
     * 测试更新操作
     */
    @Test
    public void testUpdate(){
        User user = new User();
        user.setId(49);
        user.setUsername("update 6maosong");
        user.setAddress("北京");
        user.setSex("男");
        user.setBirthday(new Date());

        //5.执行更新方法
        userDao.updateUser(user);

    }

    /**
     * 测试删除操作
     */
    @Test
    public void testDelete(){
        //5.执行删除方法
        userDao.deleteUser(42);

    }

四、模糊查询


IUserDao:

 /**
     * 根据名称模糊查询
     * @param username
     * @return
     */
     List<User> findByName(String username);

IUserDao.xml

<!--根据名称模糊查询-->
    <select id="findByName" parameterType="String" resultType="sise.cn.domain.User">
        select * from user where username like #{name};
        
    </select>

test:

 /**
     * 测试模糊查询
     */
    @Test
    public void testfindByName(){
        //5.执行模糊查询方法
        //要提供%
        List<User> users = userDao.findByName("%王%");
        for (User user : users) {
            System.out.println(user);
        }
    }

优化



用配置文件配置连接池


1.把jdbcConfig.properties导入resource中

 	jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/eesy
    jdbc.username=root
    jdbc.password=root

2.在SqlMapConfig.xml中修改代码
配置properties和修改DataSource

  <!--配置properties-->
    <!--resource属性:用于指定文件的位置,是按照类路径写法来写,并且必须保存在于类路径下。-->
    <properties resource="jdbcConfig.properties"></properties>


    <!--环境配置-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <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>

全限定类名的优化


在SqlMapConfig.xml中

<typeAliases>
    <!--用于指定要配置别名的包,当指定后,该包下的实体类都会注册别名,并且类名就是别名,不在区分大小写-->
  <package name="sise.cn.domain"/>
</typeAliases>

在IUserDao.xml中, resultType="sise.cn.domain.User”可改为resultType=“user”

  <!--根据名称模糊查询-->
        <select id="findByName" parameterType="String" resultType="user">
            select * from user where username like #{name};
        </select>

在SqlMapConfig.xml中配置映射文件的位置

<mappers>
    <!--package 用于指定dao接口所在的包,当指定完成之后就不需要在写mapper以及resource或者class了-->
    <package name="sise.cn.dao"/>
</mappers>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值