记录 MyBatis学习: 动态代理以及传参

mybatis的动态代理:
mybatis会帮我们创建dao接口对象,在实现类中调用SqlSession方法执行sql语句

如何使用mybatis的动态代理:
1、创建SqlSession对象 SqlSession sqlSession = MyBatisUtils.getSqlSession()
2、调用getMapper()方法获取某个接口的对象 sqlSession.getMapper(接口.class)
3、使用dao接口中定义的方法,调用方法就执行了mapper文件中的sql语句,这里的mapper文件指的是sql映射文件,与接口处在同一目录下。

MyBatisUtils中封装了得到SqlSession的方法,具体如下:

public static SqlSessionFactory factory = null;
    static {
        String config = "mybatis.xml";
        try {
            InputStream in = Resources.getResourceAsStream(config);
            factory = new SqlSessionFactoryBuilder().build(in);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**获取sqlSession对象的方法**/
    public static SqlSession getSqlSession() {
        SqlSession sqlSession = null;
        if(factory != null) {
            sqlSession = factory.openSession();
        }
        return sqlSession;
    }

mybatis.xml是主配置文件,提供了数据库的连接信息和sql映射文件的位置信息

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

    <settings>
        <!--设置mybatis的输出日志 -->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!--数据库的驱动类名,新版的:com.mysql.cj.jdbc.Driver-->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <!--连接数据库的url字符串-->
                <property name="url" value="jdbc:mysql://localhost:3306/数据库名"/>
                <!--访问数据库的用户名-->
                <property name="username" value="XXX"/>
                <!--密码-->
                <property name="password" value="XXX"/>
            </dataSource>
        </environment>
    </environments>

    <!--sql mapper(sql映射文件)的位置-->
    <mappers>
        <!--一个mapper标签指定一个文件的位置。
            从类路径开始的路径信息。 target/classes
        -->
        <mapper resource="com/bjpowernode/dao/StudentDao.xml"/>
    </mappers>
</configuration>

注意:

  1. dao接口必须与mapper文件存放在同一目录下
  2. dao接口和mapper文件名一致
  3. mapper文件中的namespace是dao接口的全限定名称
  4. mapper文件中的id是接口中方法的名称

传入参数: 从java代码中把数据传入到mapper文件的sql语句中。
1)parameterType : 写在mapper文件中的 一个属性。 表示dao接口中方法的参数的数据类型。
例如StudentDao接口
public Student selectStudentById(Integer id)

  1. 一个简单类型的参数: #{任意字符}【掌握】
dao接口:
public Student selectStudentById(Integer id) 

mapper文件:
select id,name, email,age from student where id=#{studentId}
  1. 多个参数,使用@Param命名参数【掌握】
    使用 @Param(“参数名”) String name
接口 
public List<Student> selectMulitParam(@Param("myname") String name, @Param("myage") Integer age)
mapper文件:
<select>
select * from student where name=#{myname} or age=#{myage}
</select>
  1. 多个参数,使用java对象【掌握】

语法 #{属性名}

QueryParam 类
public class QueryParam {
    private String paramName;
    private Integer paramAge;
    ......
    }

接口

List<Student> selectMultiObject(QueryParam queryParam);
mapper文件:
select id,name,email,age from student where name=#{paramName} or age=#{paramAge};

5)【了解】按位置传参
/**

  • 多个参数-简单类型的,按位置传值,
  • mybatis.3.4之前,使用 #{0} ,#{1}
  • mybatis。3.4之后 ,使用 #{arg0} ,#{arg1}
    */

6)【了解】使用map传参


  # 和 $区别
  1. #使用 ?在sql语句中做站位的, 使用PreparedStatement执行sql,效率高
  2. #能够避免sql注入,更安全。
  3. $不使用占位符,是字符串连接方式,使用Statement对象执行sql,效率低
  4. $有sql注入的风险,缺乏安全性。
  5. $:可以替换表名或者列名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值