• MyBatis获取参数值的两种方式


    5、MyBatis获取参数值的两种方式
    MyBatis获取参数值的两种方式:KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{} 5.1、单个字面量类型的…{}和#{}以任意的名称获取参数的值,注意${}需要手动加单引号
    ${}
    #{}
    测试代码:
    实验结果:

    5.2、多个字面量类型的参数
    若mapper接口中的方法参数为多个时
    此时MyBatis会自动将这些参数放在一个map集合中,以arg0,arg1…为键,以参数为值;以
    param1,param2…为键,以参数为值;因此只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号
    测试代码:
    实验结果:

    5.3、map集合类型的参数
    若mapper接口中的方法需要的参数为多个时,此时可以手动创建map集合,将这些数据放在
    map中
    只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号
    测试代码:
    实验结果:

    5.4、实体类类型的参数
    若mapper接口中的方法参数为实体类对象时
    此时可以使用KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{},通过访问实体类对象中的属…{}需要手动加单引号
    测试代码:
    实验结果:

    5.5、使用@Param标识参数
    可以通过@Param注解标识mapper接口中的方法参数
    此时,会将这些参数放在map集合中,以@Param注解的value属性值为键,以参数为值;以
    param1,param2…为键,以参数为值;只需要通过KaTeX parse error: Expected 'EOF', got '#' at position 4: {}和#̲{}访问map集合的键就可以获…{}需要手动加单引号
    测试代码:
    实验结果:

    尝试举一反三、尽可能测试你脑子里面的想法

    实验目录的结构
    在这里插入图片描述

    UserMapper.java

    package com.softeem.mapper;
    
    import com.softeem.pojo.User;
    import org.apache.ibatis.annotations.MapKey;
    import org.apache.ibatis.annotations.Param;
    
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    // UserMapper -> UserDao
    public interface UserMapper {
    
        /**
        * 添加用户信息
         */
        public int insertUser(User user);
    
        /*
        * 删除用户
        */
        public int deleteUser(int id);
    
        /**
         * 修改用户
         * */
        public int updateUser(User user);
    
        //单个字面量类型的参数
        /**
         * 查询一个用户对象
         * @return user对象
         */
        public User getUserById(int id);
    
        /**
         * 查询多条数据
         * @return 返回List
         */
        public List<User> getUserList();
    
        //多个字面量类型的参数
        public List<User> getUserByNameAndEmail(String username,
                              String email);
    
        //map集合类型的参数
        public List<User> getUserByNameAndSex(Map map);
    
        public List<User> getUserByAgeAndSex(@Param("myage") int age,
                                             @Param("mysex") String sex);
    
        public List<User> page(@Param("user") User user,
                               @Param("pageNo") int pageNo ,
                               @Param("pageSize") int pageSize);
    
        /**
         *查询用户的总记录数
         *@return
         *在MyBatis中,对于Java中常用的类型都设置了类型别名
         *例如: java.lang.Integer-->int|integer
         *例如: int-->_int|_integer
         *例如: Map-->map  ,  List-->list
         */
        int getCount();
    
        /**
         *根据用户id查询用户信息为map集合
         *@param id
         *@return
         */
        //@MapKey("empno")
        Map<String, Object> getUserToMap(int id);
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74

    User.java

    package com.softeem.pojo;
    
    
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    public class User {
        private Integer id;
        private String username;
        private String password;
        private Integer age;
        private String gender;
        private String email;
    
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    UserMapper.xml

    <?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)保持一致-->
    <mapper namespace="com.softeem.mapper.UserMapper">
        <!-- mapper接口中方法的方法名和映射文件中编写SQL的标签的id属性保持一致-->
        <insert id="insertUser" parameterType="com.softeem.pojo.User">
            insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
        </insert>
    
        <!--int deleteUser();-->
        <delete id="deleteUser" parameterType="int">
            delete from t_user where id = #{id}
        </delete>
    
        <!--int updateUser();-->
        <update id="updateUser" parameterType="com.softeem.pojo.User">
            update t_user set username=#{username},password=#{password},age=#{age},
                              sex=#{sex},email=#{email} where id = #{id}
        </update>
    
        <!--查询方法与增删改方法不一样.查询一定返回一个结果集的.
            单个字面量类型的参数:
                parameterType="int" 可以省略
                方法中的(int id) 不一定非要写id 可以是适合一个值
            -->
        <!--User getUserById();-->
        <select id="getUserById" resultType="com.softeem.pojo.User" parameterType="int">
            <!-- ${id}等于字符串拼接  #{id}等于?占位符 -->
            select * from t_user where id = ${id}
        </select>
    
        <!--List<User> getUserList();-->
        <select id="getUserList" resultType="com.softeem.pojo.User">
            select * from t_user
        </select>
    
        <!-- 多个字面量类型的参数: 会自动封装成map对象 使用 arg0 arg1 or param1 param2 做为key来获取值-->
        <!-- List<User> getUserByNameAndEmail(String username, String email);-->
        <select id="getUserByNameAndEmail" resultType="com.softeem.pojo.User" parameterType="map">
            select * from t_user where username = #{param1} and email = #{param2}
        </select>
    
    
        <select id="getUserByNameAndSex" resultType="com.softeem.pojo.User" parameterType="map">
            select * from t_user where username = #{username} and sex = #{sex}
        </select>
    
        <select id="getUserByAgeAndSex" resultType="com.softeem.pojo.User"
                                        parameterType="com.softeem.pojo.User">
            select * from t_user where age=#{myage} and sex=#{mysex}
        </select>
    
        <select id="page" resultType="com.softeem.pojo.User" parameterType="map">
            select * from t_user where sex = #{user.sex} limit #{pageNo},#{pageSize}
        </select>
    
    
        <select id="getCount" resultType="int">
            select count(*) from t_user
        </select>
    
        <select id="getUserToMap" resultType="java.util.Map" parameterType="int">
            select e.*,d.dname,d.loc from emp e , dept d
                                     where e.deptno = d.deptno and e.empno = #{id};
        </select>
    
    
    </mapper>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    jdbc.properties

    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://localhost:3306/mytest19?useUnicode=true&characterEncoding=utf8&useSSL=false
    jdbc.username=root
    jdbc.password=123456
    
    • 1
    • 2
    • 3
    • 4

    mybatis-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>
        <!--引入properties文件-->
        <properties resource="jdbc.properties" />
    
        <settings>
    <!--        开启驼峰标识, 数据库为下划线命名规则, 而实体类为驼峰标识, 不开启此选项无法查询出数据-->
            <setting name="mapUnderscoreToCamelCase" value="true"/>
        </settings>
    
        <!--设置类型别名-->
        <typeAliases>
            <!--
            typeAlias:设置某个类型的别名属性:
            type:设置需要设置别名的类型
            alias:设置某个类型的别名,若不设置该属性,那么该类型拥有默认的别名,即类名
            且不区分大小写
            -->
    <!--        <typeAlias type="com.softeem.pojo.User"></typeAlias>-->
    
            <!--以包为单位,将包下所有的类型设置默认的类型别名,即类名且不区分大小写-->
    <!--        com.softeem.mybatis.pojo.User -> user-->
            <package name="com.softeem.pojo"/>
        </typeAliases>
    
    
        <!--设置连接数据库的环境-->
        <!--
        environments:配置多个连接数据库的环境属性:
        default:设置默认使用的环境的id
        -->
        <environments default="development">
            <!--
            environment:配置某个具体的环境属性:
            id:表示连接数据库的环境的唯一标识,不能重复
            -->
            <environment id="development">
                <!--
                    transactionManager:设置事务管理方式属性:
                    type="JDBC|MANAGED"
                    JDBC:表示当前环境中,执行SQL时,使用的是JDBC中原生的事务管理方式,事 务的提交或回滚需要手动处理
                    MANAGED:被管理,例如Spring
                    -->
                <transactionManager type="JDBC"/>
                <!--
                dataSource:配置数据源属性:
                    type:设置数据源的类型type="POOLED|UNPOOLED|JNDI"
                        POOLED:表示使用数据库连接池缓存数据库连接
                        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>
    
            <environment id="peijie">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <property name="driver" value="com.mysql.jdbc.Driver"/>
                    <property name="url" value="jdbc:mysql://192.168.1.10:3306/mytest20?useUnicode=true&characterEncoding=utf8&useSSL=false"/>
                    <property name="username" value="root"/>
                    <property name="password" value="123456"/>
                </dataSource>
            </environment>
        </environments>
    
        <!--引入映射文件-->
        <mappers>
    <!--        <mapper resource="mappers/UserMapper.xml"/>-->
    
            <!--
            以包为单位引入映射文件要求:
            1、mapper接口所在的包要和映射文件所在的包一致
            2、mapper接口要和映射文件的名字一致
            -->
            <package name="com.softeem.mapper"/>
        </mappers>
    </configuration>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85

    UserMapperTest.java

    package com.softeem.mappertest;
    
    import com.softeem.mapper.UserMapper;
    import com.softeem.pojo.User;
    import org.apache.ibatis.annotations.Param;
    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 UserMapperTest {
        private UserMapper userMapper ;
    
        @Before
        public void init() throws IOException {
            //InputStream in = UserMapperTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
            //读取MyBatis的核心配置文件
            InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
            //创建SqlSessionFactoryBuilder对象
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            //通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(in);
            //创建SqlSession对象,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
            //SqlSession sqlSession = sqlSessionFactory.openSession(false);
            //创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
            SqlSession sqlSession = sqlSessionFactory.openSession(true);
            //通过代理模式创建UserMapper接口的代理实现类对象
            userMapper = sqlSession.getMapper(UserMapper.class);
    
        }
    
        @Test
        public void inserUserTest(){
           // System.out.println("userMapper = " + userMapper);
            User user = new User();
            user.setUsername("张三");
            user.setPassword("123");
            user.setSex("男");
            user.setAge(20);
            user.setEmail("123@q.com");
            int i = userMapper.insertUser(user);
            System.out.println("影响行i = " + i);
        }
    
        @Test
        public void deleteUserTest(){
            int i = userMapper.deleteUser(17);
            System.out.println("影响行i = " + i);
        }
    
        @Test
        public void updateUserTest(){
            User user = userMapper.getUserById(1);
            user.setUsername("张学友");
            int i = userMapper.updateUser(user);
            System.out.println("影响行i = " + i);
        }
        
        @Test
        public void getUserByIdTest(){
            User user = userMapper.getUserById(5);
            System.out.println("user = " + user);
        }
    
        @Test
        public void getUserListTest(){
            List<User> userList = userMapper.getUserList();
            //System.out.println("user = " + user);
            for (User user : userList) {
                System.out.println("user = " + user);
            }
        }
    
        @Test
        public void getUserByNameAndEmailTest(){
            List<User> users = userMapper.getUserByNameAndEmail("abc", "abc@qq.com");
            users.forEach(System.out::println);
        }
    
        @Test
        public void getUserByNameAndSex(){
            Map map = new HashMap( );
            map.put("username" , "abc");
            map.put("sex" , "男");
            List<User> users = userMapper.getUserByNameAndSex(map);
            users.forEach(System.out::println);
        }
    
        @Test
        public void getUserByAgeAndSexTest(){
            List<User> user = userMapper.getUserByAgeAndSex(20, "男");
            user.forEach(System.out::println);
        }
    
        @Test
        public void pageTest(){
            User user = new User();
            user.setSex("男");
            List<User> users =
                    userMapper.page(user, (2-1)*5, 5);
            users.forEach(System.out::println);
        }
        
        @Test
        public void getCount(){
            int count = userMapper.getCount();
            System.out.println("count = " + count);
        }
    
        @Test
        public void getUserToMapTest(){
            Map<String, Object> userToMap = userMapper.getUserToMap(7369);
            System.out.println("userToMap = " + userToMap);
        }
    
    
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127

    根据文中的相关的注释,足以理解mybatis获取参数的两种方式已经区别和相关的使用方式,动手实践一下把!

  • 相关阅读:
    如何修改input的placeholder默认颜色
    cannot allocate memory in static TLS block
    js的map方法
    【AI】推理引擎中的模型小型化问题
    docker创建mysql,以及mysql无法连接问题
    redis + celery
    全网最全 Chrome浏览器插件推荐大全 持续更新中
    nodejs--开发自己的项目——2——创建保存用户信息的表
    弗洛伊德算法(C++)
    【数据结构】查找——散列表(哈希表小总结 附例题)
  • 原文地址:https://blog.csdn.net/weixin_45459209/article/details/132939221