Mybatis(一)未通过反射接口实现查询操作.通过实现接口

版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/82989041

pom.xml设置依赖


        <!-- mybatis jar 包依赖 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.1</version>
        </dependency>

        <!-- 数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.39</version>
        </dependency>
        <!-- log4j日志打印 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>

mybatis的全局配置文件

<?xml version="1.0" encoding="UTF-8" ?>

<!-- mybatis 框架头文件声明,类似spring环境,均需要加入头文件 -->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!--添加数据库连接的相关配置-->
<configuration>
    <properties resource="jdbc.properties"></properties>
    <typeAliases>
        <package name="com.sxt.po"></package>
    </typeAliases>
<environments default="development">
    <environment id="development">
        <!--加入事务控制-->
        <transactionManager type="jdbc"></transactionManager>
        <!--配置数据库的连接信息-->
        <dataSource type="pooled">
            <property name="driver" value="${driver}" />
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
        </dataSource>
    </environment>
</environments>
    <mappers>
        <package name="com.sxt.mapper"/>
    </mappers>
</configuration>

log4j.properties的配置信息

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

jdbc.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/mybatis01
username=root
password=123456

配置UserMapper的配置文件和同名的接口文件

<?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">
<mapper namespace="com.sxt.mapper.UserMapper">
    <sql id="base">
        id,userName,userPwd,realName,nation,cardId
    </sql>
    <!--单个查询-->
    <select id="queryUserById" parameterType="int" resultType="user">
        SELECT <include refid="base" /> FROM user where id=#{id}
    </select>
    <!--通过名字查找-->
    <select id="queryUserByName" parameterType="string" resultType="user">
        SELECT <include refid="base" /> FROM user WHERE userName=#{userName}
    </select>
    <!--通过名字和id查找-->
    <select id="queryUserByMap" parameterType="map" resultType="user">
        SELECT <include refid="base" /> FROM user WHERE userName=#{userName} AND id=#{id}
    </select>

    <!--通过用户查找-->
    <select id="queryUserByUser" parameterType="user" resultType="user">
        SELECT <include refid="base" /> FROM user WHERE userName=#{userName} AND id=#{id}
    </select>

    <!--查找用户总数-->
    <select id="queryUserTotal" resultType="int">
        SELECT count(*) from user
    </select>
    <!--查找用户名-->
    <select id="queryUserNameById" parameterType="int" resultType="string">
        SELECT userName FROM user WHERE id=#{id}
    </select>

    <!--通过map查找用户map,以字段名为key,表字段的值为value-->
    <select id="queryUserMapById" parameterType="int" resultType="map">
        SELECT * FROM user WHERE id=#{id}
    </select>

    <!--模糊查询,查询数据库中同一类的-->
    <select id="queryUserByParams" parameterType="string" resultType="user">
        SELECT <include refid="base" /> FROM user WHERE userName LIKE concat('%',#{userName},'%')
    </select>

    <!--在crud中,除了查询外其他的类型都无需指定返回的类型-->
    <!--添加操作-->
    <insert id="addUser" parameterType="user">
        INSERT INTO user (id, userName, userPwd, realName, nation, cardId)
        VALUES (#{userName},#{userPwd},#{realName},#{nation},#{cardId})
    </insert>
</mapper>

定义接口

package com.sxt.mapper;

import com.sxt.po.User;

import java.util.List;
import java.util.Map;

public interface UserMapper {
    //查询语句
    public  User queryUserById(Integer id);
    //通过名字查询
    public  User queryUserByName(String username);
    //通过名字和id查找
     public User queryUserByMap(Map map);
     //通过用户查找
    public User queryUserByUser(User user);
    //查询总数
    public Integer queryUsertTotal();

    //查找用户名
    public String queryUserNameById(Integer id);
    //查找用户map,以字段名为key,表字段的值为value
    public Map queryUserMapById(Integer id);

    //模糊查询,查询数据库中同一类的
    public List<User> queryUserByParams(String username);

    //插入操作
    public Integer addUser(User user);

}

以及接口的实现类

package com.sxt.mapper.impl;

import com.sxt.mapper.UserMapper;
import com.sxt.po.User;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import java.util.List;
import java.util.Map;

public class UserMapperImpl implements UserMapper{

    private SqlSessionFactory sqlSessionFactory;

    public UserMapperImpl(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    @Override

    //简单查询
    public User queryUserById(Integer id) {
        SqlSession sqlSession = null;
        User user = null;
        try {
            sqlSession = sqlSessionFactory.openSession();
            user=sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserById",id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession!=null)
                sqlSession.close();
        }
        return user;
    }

    @Override
    //通过名字查询
    public User queryUserByName(String username) {
        SqlSession sqlSession = null;
        User user = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            user = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserByName",username);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return user;
    }

    @Override
    //通过名字和id查找
    public User queryUserByMap(Map map) {
        SqlSession sqlSession = null;
        User user = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            user = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserByMap",map);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return user;
    }

    @Override
    //通过用户查找
    public User queryUserByUser(User user2) {
        SqlSession sqlSession = null;
        User user = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            user = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserByUser",user2);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return user;
    }

    @Override
    //查询总数
    public Integer queryUsertTotal() {
        SqlSession sqlSession = null;
        Integer total = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
           total = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserTotal");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return total;
    }

    @Override
    public String queryUserNameById(Integer id) {

        SqlSession sqlSession = null;
        String username  = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            username = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserNameById",id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return username;
    }

    @Override
    public Map queryUserMapById(Integer id) {
        SqlSession sqlSession = null;
        Map map  = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            map = sqlSession.selectOne("com.sxt.mapper.UserMapper.queryUserMapById",id);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return map;
    }

    @Override
    //模糊查询,查询数据库中同一类的
    public List<User> queryUserByParams(String username) {
        SqlSession sqlSession = null;
        List<User> userList = null;

        try {
            sqlSession = sqlSessionFactory.openSession();
            userList = sqlSession.selectList("com.sxt.mapper.UserMapper.queryUserByParams",username);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession !=null){
                sqlSession.close();
            }
        }
        return userList;
    }

    @Override
    public Integer addUser(User user) {
        return null;
    }

}

测试实现类

package com.sxt.mapper.impl;

import com.sxt.mapper.UserMapper;
import com.sxt.po.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class UserMapperImplTest {
    private UserMapperImpl userMapper;
    @Before
    public void before() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybaties.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        userMapper = new UserMapperImpl(sqlSessionFactory);
        //通过反射动态生成,不用写实现类
        //SqlSession session  = sqlSessionFactory.openSession();
        //userMapper=session.getMapper(UserMapper.class)
    }

    @Test
    //测试通过id查询
    public void queryUserById(){
        User user = userMapper.queryUserById(1);
        System.out.println(user);
    }
    @Test
    //测试通过name查询
    public void queryUserByName(){
        User user = userMapper.queryUserByName("1");
        System.out.println(user);
    }
    //通过名字和id查询
    @Test
    public void queryUserByMap(){
        Map map = new HashMap();
        map.put("id",1);
        map.put("userName","1");
        User user = userMapper.queryUserByMap(map);
        System.out.println(user);
    }

    //通过用户名查找
    @Test
    public void queryUserByUser(){
        User user1 = new User();
        user1.setId(1);
        user1.setUserName("1");

        User user = userMapper.queryUserByUser(user1);
        System.out.println(user);
    }
    //查询总数
    @Test
    public void queryUsertTotal()throws Exception{
        Integer total = userMapper.queryUsertTotal();
        System.out.println("total:"+total);
    }
//    java.lang.IllegalArgumentException 出现错误,方法的参数不匹配 实现类中自己多写了一个字母

    //通过用户id查询用户名
    @Test
    public void queryUserNameById(){
        String username = userMapper.queryUserNameById(1);
        System.out.println("username:"+username);
    }

    //-通过map查找用户map,以字段名为key,表字段的值为value
    @Test
    public void queryUserMapById(){
        Map map = userMapper.queryUserMapById(1);
        System.out.println("username:"+map.get("userName"));
        System.out.println("id:"+map.get("id"));
        System.out.println("nation:"+map.get("nation"));
    }
    //模糊查询,查询数据库中同一类的
    @Test
    public void queryUserByParams(){
        List<User> list= userMapper.queryUserByParams("1");
        System.out.println("size"+list.size());
        for (User user:list){
            System.out.println(user);
        }
    }
    @Test
    public void addUser(){

    }


}

猜你喜欢

转载自blog.csdn.net/wwwzydcom/article/details/82989041
今日推荐