ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【MyBatis】学习笔记05:获取参数值的两种方式

2022-03-27 17:00:57  阅读:171  来源: 互联网

标签:mapper String 05 参数值 sqlSession User MyBatis import public


【Mybatis】学习笔记01:连接数据库,实现增删改

【Mybatis】学习笔记02:实现简单的查

【MyBatis】学习笔记03:配置文件进一步解读(非常重要)

【MyBatis】学习笔记04:配置文件模板


目录


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

1.字符串拼接:${}

2.占位符赋值:#{}

一些准备工作

java/cc/mllt/sky/utils

resources/cc/mllt/sky/utils

image.png

image.png

封装SQLSessionUtils工具类

package cc.mllt.sky.utils;
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 java.io.IOException;
import java.io.InputStream;

public class SqlSessionUtils {
    public  static SqlSession getSqlSession(){
        SqlSession sqlSession = null;
        try{
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
            sqlSession  = sqlSessionFactory.openSession(true);

        }catch (IOException e){
            e.printStackTrace();
        }

        return sqlSession;
    }
}

image.png

MyBatis获取参数值的各种情况

1.mapper接口方法的参数为单个的字面量类型

image.png

image.png

image.png

或者这样

image.png

总结

可以通过${}#{}以任意的字符串获取参数值,但是需要注意${}的单引号问题

2.mapper接口方法的参数为多个时

image.png

image.png

image.png

总结

mapper接口方法的参数为多个时,MyBatis会将这些参数放在map集合中,以两种方式进行存储,

第一种为:arg0,arg1……为键,以参数为值

第二种为:以param1,param2……为键,以参数为值

因此只需要通过#{}${}以键的形式访问值就可以了。

3.mapper接口方法的参数有多个时,可以手动将这些参数放在一个map中存储

image.png

image.png

image.png

4.mapper接口方法的参数是一个实体类类型的参数

实体类:属性 属性值

Map:键 值

通过#{}或${}以属性的方式访问值即可

image.png

image.png

image.png

image.png

必须是属性名字,不能乱写噢!

5.使用@Param命名参数

此时Mybatis会将这些参数放在一个Map集合中,以两种方式存储

a. 以@Param注解的值为键,以参数为值

b. 以param1,param2……为键,以参数为值

通过#{}或${}以键的方式访问值即可

image.png

image.png

image.png

源码贴贴

目录

image.png

cc.mllt.sky.utils.UserParameterMapper.java

package cc.mllt.sky.utils;

import cc.mllt.sky.jdbc.User;
import org.apache.ibatis.annotations.Param;

import java.util.Map;

public interface UserParameterMapper {
    /**
     * 登录验证
     * @param username String 用户名
     * @param password String 密码
     * @return User对象
     */
    User UserLogin(String username,String password);

    /**
     * 验证登陆
     * @return User对象
     */
    User UserLoginByMap(Map<String,Object> map);

    /**
     * 验证登陆(使用@Param注解)
     * @param username 用户名
     * @param password 用户密码
     * @return User对象
     */
    User UserLoginByParam(@Param("name") String username, @Param("password") String password);


    /**
     * 根据用户账号查询用户信息
     * @return User对象
     */
    User getUserByUserCount(String usercount);

    /**
     * 添加用户
     * @param user 用户对象
     * @return int型
     */
    int UserAdd(User user);
}

cc.mllt.sky.jdbc.User.java

package cc.mllt.sky.jdbc;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Timestamp;

public class User {
    private BigInteger userId;
    public String userName;
    private String userCount;
    private String userPassword;
    private int userGrade;
    public Timestamp userRegDate;
    private BigDecimal userBlance;

    public User( String userName,String userCount,String userPassword) {
        this.userName=userName;
        this.userCount=userCount;
        this.userPassword=userPassword;
    }

    //getter and setter

    public BigInteger getUserId() {
        return userId;
    }

    public void setUserId(BigInteger userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserCount() {
        return userCount;
    }

    public void setUserCount(String userCount) {
        this.userCount = userCount;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public int getUserGrade() {
        return userGrade;
    }

    public void setUserGrade(int userGrade) {
        this.userGrade = userGrade;
    }

    public Timestamp getUserRegDate() {
        return userRegDate;
    }

    public void setUserRegDate(Timestamp userRegDate) {
        this.userRegDate = userRegDate;
    }

    public BigDecimal getUserBlance() {
        return userBlance;
    }

    public void setUserBlance(BigDecimal userBlance) {
        this.userBlance = userBlance;
    }

    @Override
    public String toString(){
        return "User{"+
                "userId='"+userId+"'"+
                ",userName='"+userName+"'"+
                "userCount='"+userCount+"'"+
                ",userPassword='"+userPassword+"'"+
                "userGrade='"+userGrade+"'"+
                ",userRegDate='"+userRegDate+"'"+
                "userBlance='"+userBlance+"'}";
    }
}

resources.cc.mllt.sky.utils.UserParameterMapper.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="cc.mllt.sky.utils.UserParameterMapper">
<!--    User getUserByUsedCount(String usercount);-->
    <select id="getUserByUserCount" resultType="User">
   <!--select * from t_users where `userCount` = #{username}-->
        select * from t_users where `userCount` = '${username}'
    </select>
<!--    User UserLogin(String username,String password);-->
    <select id="UserLogin" resultType="User">
        <!--select * from t_users where userCount=#{arg0} and userPassword=#{arg1}-->
        <!--select * from t_users where userCount=#{param1} and userPassword=#{param2}-->
        <!--select * from t_users where userCount=#{param1} and userPassword=#{arg1}}-->
        select * from t_users where userCount='${param1}' and userPassword='${arg1}'
    </select>
<!--    User UserLoginByMap(Map<String,Object> map);-->
    <select id="UserLoginByMap" resultType="User">
        select * from t_users where userCount=#{username} and userPassword=#{password}
    </select>
<!--    int UserAdd(User user);-->
    <insert id="UserAdd">
        insert into t_users set
        `userName`=#{userName},
        `userCount`=#{userCount},
        `UserPassword`=#{userPassword},
        `userGrade`='0',
        `userBlance`='0';
    </insert>
<!--    User UserLoginByParam(@Param("name") String username, @Param("password") String password);-->
    <select id="UserLoginByParam" resultType="User">
        select * from t_users where userCount=#{name} and userPassword=#{password}
    </select>
</mapper>

Test

下面有一些测试方法是以前用到的,在本次笔记中没有用到的,可以删掉

import cc.mllt.sky.jdbc.User;
import cc.mllt.sky.jdbc.UsersMapper;
import cc.mllt.sky.utils.SqlSessionUtils;
import cc.mllt.sky.utils.UserParameterMapper;
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.jupiter.api.Test;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TestUsers {

    @Test
    public void UsersAdd() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        mapper.insertUser();
    }
    @Test
    public void UsersDel() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        mapper.deleteUser();
    }
    @Test
    public void UsersUpdate() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        mapper.updateUser();
    }
    @Test
    public void UsersGetById() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        User user =  mapper.selectUserById();
        System.out.println(user);
        System.out.println(user.getUserName());
    }
    @Test
    public void UsersGetAll() throws IOException {
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory  = new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession = sqlSessionFactory.openSession(true);
        UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
        List<User> list =  mapper.selectUser();
        list.forEach(user -> System.out.println(user));
    }

    @Test
    public void testJDBC() throws Exception{
        String username ="xrilang";
        Class.forName("");
        //创建链接对象
        Connection connection = DriverManager.getConnection("");
        //PreparedStatement ps = connection.prepareStateme                                                                                                                                                                                                                                                                                                                                                       nt("selsect * from t_users where userName = '"+username+"'");//麻烦且不安全,会造成SQL注入
        PreparedStatement ps = connection.prepareStatement("select  * from t_users where userName= ? ");
        ps.setString(1,username);

    }

    @Test
    public void GetUserByCount(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
        User user = mapper.getUserByUserCount("test001");
        System.out.println(user);
    }

    @Test
    public void CheckUserLogin(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
        User user = mapper.UserLogin("test001","123456改了密码");
        System.out.println(user);
    }

    @Test
    public void CheckUserLoginByMap(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
        Map<String,Object> map = new HashMap<>();
        map.put("username","test001");
        map.put("password","123456改了密码");
        User user = mapper.UserLoginByMap(map);
        System.out.println(user);
    }

    @Test
    public void UserAdd(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
        int result = mapper.UserAdd(new User("张三","mllt@xrilang.com","123"));
        System.out.println(result);
    }

    @Test
    public void CheckUserLoginByParam(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        UserParameterMapper mapper = sqlSession.getMapper(UserParameterMapper.class);
        Map<String,Object> map = new HashMap<>();
        User user = mapper.UserLoginByParam("test001","123456改了密码");
        System.out.println(user);
    }
}

标签:mapper,String,05,参数值,sqlSession,User,MyBatis,import,public
来源: https://www.cnblogs.com/mllt/p/mybatis05.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有