MyBatis

配置Mybatis

  1. 所需jar
    mybatis-xxx.jar
    jdbc驱动包
  2. 配置文件
    在这里插入图片描述
    config.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">

<configuration>	
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <!-- 数据库信息 -->
                <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/123?useSSL=FALSE&amp;&amp;serverTimezone=GMT"/>
                <property name="username" value="root"/>
                <property name="password" value="932567"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 加在映射文件 -->
    <mappers>
        <mapper resource="entity/personMapper.xml" />
    </mappers>
</configuration>

注释版:

<!-- 指定运行数据库环境,可在build的第二个参数强行指定 -->
<environments default="development">
    <!-- 可定义多个 -->
    <environment id="development">
        <!--事务提交方式:
            JDBC:利用JDBC方式处理事务(commit rollback close)
            MANAGER:将事务交由 其他组件去托管(spring , jobss),默认关闭连接
        -->
        <transactionManager type="JDBC"/>
        <!-- 数据源类型
            UNPOOLED :传统JDBC模式,每次都打开关闭
             POOLED : 使用数据库连接池(一般)
             JNDI : 从tomcat中获取内置的数据库连接池
        -->
        <dataSource type="POOLED">
            <!-- 数据库信息 -->
            <property name="driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="url" value="jdbc:mysql://localhost:3306/123?useSSL=FALSE&amp;&amp;serverTimezone=GMT"/>
            <property name="username" value="root"/>
            <property name="password" value="932567"/>
        </dataSource>
    </environment>
</environments>

personMapper.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="entity.personMapper">
    <select id="selectPersonById" resultType="entity.Person" parameterType="int">
        select * from   person where id = #{id}
    </select>
</mapper>

其中,namespace是唯一标识符,最好是包名+xml名
3. 编码
实体类(POJO)属性跟表属性名字一样

//加载MyBatis配置文件(为了访问数据库)
Reader reader = Resources.getResourceAsReader("src/config.xml");
//SqlSessionFactory - connection
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession sqlSession = sqlSessionFactory.openSession();
//namespcae+使用方法的 id
String statement = "entity.personMapper.selectPersonById";
Person person =  sqlSession.selectOne(statement,1);

若为增删改,且事务提交方式为JDBC, 需要sqlsesson.commit();
可看:

<update id="updateStudentByStuNo" parameterType="entity.Student">
    update student set stuName = #{stuName} ,stuAge = #{stuAge} ,graName = #{graName} where stuNo = #{stuNo}
</update>

<!-- 返回列表返回值是单个类型,在java处selectList即可 -->
<select id="queryAllStudents" resultType="entity.Student">
    select * from student
</select>

mapper动态代理(MyBatis接口开发)

不同之处:省略statement(namespace+方法id)

接口的定义:

public interface StudentMapper {
    /**
     * 1 根据 接口名 找到 mapper.xml文件 (根据的是namespace = 接口全类名)
     * 2 根据 接口的方法名 找到 mapper.xml文件中的 方法id
     * 3 接口方法的 输入参数 和 mapper.xml 标签中的parameterType 类型一致
     * 4 接口方法的 返回值 和 mapper.xml 标签中的 resultType 类型一致
     */

    public Student queryStudentByStuNo(int stuNo);
    public List<Student> queryAllStudents();
}

配置文件:

<mapper namespace="mapper.StudentMapper">
    <select id="queryStudentByStuNo" parameterType="int" resultType="entity.Student">
        select * from student where stuno = #{stuno}
    </select>
</mapper>

执行时:

public void testSelect() throws IOException {
    Reader reader = Resources.getResourceAsReader("myBatisConfig.xml");
    SqlSession sqlSession = new SqlSessionFactoryBuilder().build(reader).openSession();
    //通过session对象获取接口
    StudentMapper studentMapper = sqlSession.getMapper(StudentMapper.class);
    Student student = studentMapper.queryStudentByStuNo(7);
    System.out.println(student);
}

总结:通过session对象获取接口,在调用接口中的方法,程序会自动执行该方法对应的SQL


输入参数:parameterType

  1. 类型为简单类型(8个基本类型加String)

    • #{任意值}
      ${value}
    • #{ } 自动给String类型加上’ ‘(自动类型转换)
      ${ } 原样输出,适合于动态排序(动态字段,需要人工加’ ')
    • #{ } 防止sql注入
      ${ } 不防止
  2. 类型为简单类型 规则同上 1.b

    • #{属性名}
      ${属性名}

    • #{属性名.属性名}
      ${属性名.属性名}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值