mybatis入门程序(在maven工程下的编写)
此开发模式是基于原生DAO的开发方式(ibatis遗留的方式)---->不推荐的,只是学习使用,具体操作会员更加现代的方式,这是以前老程序员使用的方式
需要程序员自己编写DAO及其DAO实现类
1.添加mybatis的依赖
2.在src/main/resource下新建log4.properties(配置完之后可以在类中使用)
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.org.apache.ibatis=DEBUG
3.编写实体类
4.编写Dao及其实现类(实现类先不写内容)
5.编写mybatis的全局配置文件
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
(编写了一个jdbc配置文件,便于在全局配置文件中引用,以后数据库有修改时,直接修改这个文件就行了,可以解耦合。当然了,也可以不用写这个文件,直接在全局配置文件里面写。)
-----------------------------------------------------------------
mybatis-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>
<!-- 加载资源文件[可选] -->
<properties resource="jdbc.properties"></properties> <!-- 加载上面写的jdbc.properties文件 -->
<environments default="dev">
<environment id="dev">
<!--利用jdbc管理事务 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源信息 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 指定映射文件的位置 --> <!--载入映射文件,因为在java类中加载时之加载了全局配置文件,将映射文件引入其中,可以间接加载到 -->
<mappers>
<mapper resource="User.xml"/>
</mappers>
</configuration>
6.编写映射文件User.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="user">
<!--
1.标识映射文件中的sql,将sql语句封装到mapped statement对象中,所以称为statement的id
2.parameterType:指定输入参数类型
3.#{}:表示一个占位符
4.#{id}:其中的id表示接收的输入参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以为value或者其他
5.resultType:指定sql输出结果的所映射的java对象类型,select指定resultType表示将单条记录映射成的java对象
当进行模糊查询时:有以下几种问题
1.resultType:指定就是单条记录所映射成java对象类型
2.${}:表示拼接sql串,将接收到参数的内容不加任何修饰拼接在sql中
3.使用${}容易引起sql注入
4.${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只能用value
#{}和${}区别
#{}表示占位符?,#{}接收简单类型的参数时,里面的名称可以任意
${}表示拼接符,${}接收简单类型的参数时,里面的名称必须是value
${}里面的值会原样输出,不加解析(如果该参数值是字符串,有不会添加引号)
${}存在sql注入的风险,但是有些场景下必须使用,比如排序后面会动态传入排序的列名
-->
<select id="findById" parameterType="java.lang.Long" resultType="cn.zzsxt.entity.User">
select * from tb_user where id = #{id}
</select>
</mapper>
7.编写Dao实现类中的方法
//加载mybatis-config.xml配置
InputStream ips = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//获取SqlSessionFactory对象
SqlSessionFactory sqlSessionFactory = builder.build(ips);
//获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
user = sqlSession.selectOne("user.findById",id);//执行在映射文件中配置的statement的句柄(namespace+id)
//关闭SqlSession
sqlSession.close();
结合下面这个图理解实现过程,黄色为我们写程序需要配置的和实现的。