mybatis base (a) XML Configuration

If the article is incorrect, please downstairs comment, thank you for the positive correction! Learn together, become a big brother!

mybatis:

1. Lightweight

2. advanced mapping (mapping entity class and database table field) so that you can follow the development of the entity classes to operate without the need to pay attention to the database, (but in fact has done it again with the correspondence between the entity class database field)

3.mybatis the dao layer interface implementation class does not need to write, manner of delivery to xml or annotation

4.mybatis required dependent jar

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.0</version>
    </dependency>

     <!-- mysql 连接数据库  java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.15</version>
    </dependency>
  1. Note: mapping the path needs xml file corresponding to the interface

Chapter One way xml record

Xml file requires two
main configuration file: mybatis-config.xml
mapping file: user.xml

xml file header

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

mybatis-config.xml

<configuration>
    <!--配置环境-->
    <environments default="mysql">
        <!--配置mysql的环境-->
        <environment id="mysql">
            <!--配置事务-->
            <transactionManager type="JDBC"></transactionManager>
            <!--配置连接池-->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"></property>
                <property name="url" value="jdbc:mysql://localhost:3306/database"></property>
                <property name="username" value="root"></property>
                <property name="password" value="root"></property>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/mybatis/dao/User.xml"></mapper>
    </mappers>
</configuration>

user.xml

<!--映射路径-->
<mapper namespace="com.mybatis.dao.IUseDao">
    <!--
        注意点:#{}里面的字段对应的是实体类中getter后面的字段开头字母小写.如getUserName 对应的就是userName
        resultType:返回值类型
        parameterType:参数类型
        id:对应接口中的方法(对应映射路径中的方法)
    -->

    <!--
        resultMap  主要作用是让实体类与数据库表中字段名映射上
            如果实体类与数据库中字段名在不区分大小写的情况下相同的话,那就不需要配置resultMap,因为mysql数据库不区分大小写,所以可以
            直接映射上

            但是如果实体类与数据库中字段名不相同的话,我们可以由三个解决方案
            1. 直接修改数据库字段名,使之与实体类对应上
            2. 在程序中配置文件中对sql语句改造,起别名,使之与实体类映射上  (直接操作sql语句效率更高)
                如: select gender as usergender,age as userage from user;
            3. 写配置文件 resultMap,使之映射上,但是需要修改resultType="com.mybatis.entry.User"  为 resultMap="userMap" (方便)

    -->
    <resultMap id="userMap" type="com.mybatis.entry.User">
        <!--首先配置主键对应-->
        <id column="uid" property="userUid"></id>
        <!--其他属性配置-->
        <result column="username" property="userName"></result>
        <result column="gender" property="userGender"></result>
        <result column="age" property="userAge"></result>
    </resultMap>
    <!--获得所有用户列表-->
    <!--<select id="getUsers" resultMap="userMap">-->
    <select id="getUsers" resultType="com.mybatis.entry.User">
        select * from user
    </select>
    <!--添加一条信息-->
    <insert id="saveUser" parameterType="com.mybatis.entry.User">
        <!--配置插入操作后,获取插入数据的id
           keyProperty: 指定返回的id映射到bean中的哪个属性
           keyColumn: 插入数据以后,要返回的内容在数据表中对应的字段名称
           order  AFTER :表示这个selectKey语句的执行是在insert语句之后
        -->
        <selectKey keyProperty="uid" keyColumn="uid" order="AFTER" resultType="INT">
            select last_insert_id();
        </selectKey>
        insert into user(username,gender,age) values (#{userName},#{gender},#{age})
    </insert>
    <!--删除一条信息-->
    <delete id="deleteUser" parameterType="java.lang.Integer">
        delete from user where uid=#{uid}
    </delete>
    <!--更新一条信息-->
    <update id="updateUser" parameterType="com.mybatis.entry.User">
        update user set username=#{userName},gender=#{gender},age=#{age} where uid=#{uid}
    </update>
    <!--
    模糊查询:模糊查询的时候可以使用一个字段作为占位符,然后再测试类或者被调用的时候加上百分号
    -->
    <!--<select id="getUsers" resultMap="userMap">-->
    <select id="findByName" parameterType="java.lang.String" resultType="com.mybatis.entry.User">
        select * from user where username like #{name}
    </select>

    <!--查询总条数-->
    <select id="findTotal"  resultType="INT">
        SELECT COUNT(1) FROM USER
    </select>


    <!--根据多个对象查询,需要将实体类以及其他属性再封装一层成为新的实体类-->
    <!--<select id="getUsers" resultMap="userMap">-->
    <select id="findByVo" resultType="com.mybatis.entry.User" parameterType="com.mybatis.entry.Vo">
        select * from user  where username=#{user.userName} and gender=#{user.gender}
    </select>
</mapper>

interface

public interface IUseDao
{
    /**
     * 查询所有用户
     * @return
     */
    public  List<User> getUsers();

    /**
     * 添加用户
     * @return
     */
    public  boolean saveUser(User user);

    /**
     * 删除用户
     * @return
     */
    public void deleteUser(int uid);

    /**
     *修改用户
     */
    public void updateUser(User user);

    /**
     * 模糊查询
     * @param username
     * @return
     */
    public List<User> findByName(String username);

    /**
     * 查询总记录条数
     * @return
     */
    public int findTotal();

    /**
     * 根据新封装的实体类去查询(多条件查询)
     * @param vo  将多个条件封装成一个实体类
     * @return
     */
    public List<User> findByVo(Vo vo);
}

Test category

public class mybatisTest {
    private  InputStream inputStream=null;
    private SqlSession sqlSession=null;
    private IUseDao userDao=null;
    private SqlSessionFactory sessionFactory=null;

    @Before
    public void init() throws Exception
    {
         inputStream=Resources.getResourceAsStream("mybatis-config.xml");
         sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
         sqlSession=sessionFactory.openSession();
         userDao=sqlSession.getMapper(IUseDao.class);
    }

    @After
    public void destroy() throws Exception
    {
        sqlSession.commit();
        sqlSession.close();
        inputStream.close();
    }

    @Test
    public void testFindAll() throws Exception {
        List<User> list=userDao.getUsers();
        for (User user:list) {
            System.out.println(user);
        }
    }

   @Test
    public void testSaveUser() throws  Exception{
        User user=new User();
        user.setUserName("xxx");
        user.setAge(20);
        user.setGender("男");
        /*获取保存前的id*/
       System.out.println(user.getUid());
        userDao.saveUser(user);
        /*获取保存后的id*/
       System.out.println(user.getUid());
    }

    @Test
   public void testDeleteUser() throws  Exception
    {
        int uid=3;
        userDao.deleteUser(uid);
    }

    @Test
    public void testUpdateUser() throws  Exception{
        User user=new User();
        user.setUid(5);
        user.setUserName("test");
        user.setAge(20);
        user.setGender("男");
        userDao.updateUser(user);
    }

    @Test
    public void testFindByName() throws  Exception{
        List<User> users = userDao.findByName("%x%");
        for (User user:users)
        {
            System.out.println(user);
        }
    }

    @Test
    public void testFindTotal() throws  Exception{
        int total = userDao.findTotal();
        System.out.println(total);
    }

    @Test
    public void testFindByVo() throws  Exception{
        Vo vo=new Vo();
        User user=new User();
        user.setUserName("xxx");
        user.setGender("男");
        vo.setUser(user);
        List<User> vos = userDao.findByVo(vo);
        for (User user1:vos)
        {
            System.out.println(user1);
        }
    }
}

Guess you like

Origin www.cnblogs.com/chq1024/p/11563182.html