mybatis 基础(一) xml配置

如果文章有误,请各位楼下评论,感谢各位积极修正! 一起学习,成为大佬!

mybatis:

1.轻量级

2.高级映射(实体类与数据库表字段的映射) 这样就可以后续开发中去操作实体类而不需要去关注数据库,(但其实已经做了一遍实体类与数据库字段的对应关系)

3.mybatis中 dao层为接口.不需要写实现类,实现的方式交付给xml或注解

4.mybatis所需依赖的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. 注意:映射xml文件的路径需要与接口对应上

第一章 记录xml方式

需要两个xml文件
主配置文件:mybatis-config.xml
映射文件:user.xml

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

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>

接口

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

测试类

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

猜你喜欢

转载自www.cnblogs.com/chq1024/p/11563182.html