Mybatis(Eclipse)
环境
eclipse:2019-06 (4.12.0)
jdk:1.8.0_172
mybatis:3.5.3
jdbc:8.0.16
数据库:mysql
项目结构
项目结构图
框架思路
一、在SqlMapConfig.xml中设置mybatis的相关配置
二、使用输入流InputStream获取SqlMapConfig.xml配置文件
三、将上述输入流传入SqlSessionFactoryBuilder创建SqlSessionFactory会话工厂
原始DAO开发方法
四、创建Student.xml文件并在里面编写sql语句
五、编写StudentDao接口并编写StudentDaoImpl接口实现类
六、分别在每个方法实现时通过SqlSessionFactory获取SqlSession
七、在SqlSession的查询方法中传入Student.xml以调用该文件中的sql语句进行数据库操作
mapper代理开发方法
四、创建StudentMapper.xml文件并在里面编写sql语句
五、编写StudentMapper接口
六、通过SqlSessionFactory获取SqlSession
七、通过sqlSession.getMapper传入接口类获得接口对象
八、调用接口方法进行数据库操作
需要导入的包
链接:https://pan.baidu.com/s/1eaGKD9Hjeg1CgS0wvgcmtQ
提取码:nnts
项目文件
config(用于存放配置文件)
sqlmap(原始dao开发方法)
Student.xml(在实现时需要调用的sql语句)
<?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">
<!-- 映射文件 -->
<!-- namespace:命名空间, -->
<mapper namespace="test">
<!-- 放置sql语句 -->
<!-- 使用select进行查询 -->
<!-- id:在使用mapper代理后为statement的id,SqlSession查询方法的第一个参数 -->
<!-- #{}:一个占位符 -->
<!-- parameterType:指定输入参数的类型 -->
<!-- #{id}中的id:输入的参数名称,如果是简单类型,参数名可以任意 -->
<!-- resultType:sql输出结果所映射的java对象 -->
<select id="findStudentById" parameterType="int" resultType="mybatis.test1.pojo.Student">
SELECT * FROM STUDENT WHERE id = #{value}
</select>
<!-- 可能返回多条记录 -->
<!-- 返回多条记录时resultType依然为单条记录所映射的java对象 -->
<!-- ${}表示拼接sql串,将传入的参数不加任何修饰拼接在sql中 -->
<!-- ${}可能引起sql注入,如['%' or 1 = 1 or '%'],因此不建议使用 -->
<!-- ${}如果传入简单类型,${}中只能使用value -->
<select id="findStudentByName" parameterType="java.lang.String" resultType="mybatis.test1.pojo.Student">
SELECT * FROM student WHERE name LIKE '%${value}%'
</select>
<!-- 使用insert进行插入添加 -->
<!-- parameterType:指定输入的参数类型为自定义的pojo类 -->
<!-- #{}中指定pojo的属性名,接收pojo对象的属性值,mybatis通过OGNL获取对象的属性值 -->
<insert id="insertStudent" parameterType="mybatis.test1.pojo.Student">
<!-- 自增主键 -->
<!-- 将插入数据的主键返回到pojo对象中 -->
<!-- SELECT LAST_INSERT_ID():得到刚insert进记录的主键,只适用于自增主键 -->
<!-- keyProperty:将查询到的主键值设置到parameterType对象中的哪个属性 -->
<!-- order:selectKey中语句相对于insert语句的执行顺序 -->
<!-- resultType:指定SELECT LAST_INSERT_ID()的结果类型 -->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
</selectKey>
<!-- 若不插入id属性则在pojo类中id属性需为空 -->
<!-- INSERT INTO student VALUE (#{name}, #{gender}, #{id_number}, #{class_id}, #{is_cancel}) -->
<!-- 非自增主键 -->
<!-- 使用MySQL的uuid()生成主键 -->
<!-- uuid()将主键设置到pojo对应属性中,然后在insert执行时在pojo中取出属性值 -->
<!-- <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
SELECT uuid()
</selectKey> -->
INSERT INTO student VALUE (#{id}, #{name}, #{gender}, #{id_number}, #{class_id}, #{is_cancel})
</insert>
<!-- 使用delete进行删除 -->
<delete id="deleteStudent" parameterType="int">
DELETE FROM student WHERE id = #{value}
</delete>
<!-- 使用update进行更新 -->
<!-- 需传入id以及更新信息 -->
<!-- parameterType:同时包括id和更新信息,id必须存在!! -->
<update id="updateStudent" parameterType="mybatis.test1.pojo.Student">
UPDATE student SET name = #{name}, gender = #{gender}, id_number = #{id_number}, is_cancel = #{is_cancel} WHERE id = #{id}
</update>
</mapper>
db.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/[数据库名]?characterEncoding=utf-8&serverTimezone=Asia/Shanghai
jdbc.username=[帐号]
jdbc.password=[密码]
log4j.properties
# Global logging configuration
#development:DEBUG;production:info or error
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 以下标签为固定顺序 -->
<!-- 加载属性文件 -->
<properties resource="db.properties"></properties>
<!-- 设置mybatis的运行参数,全局参数会影响mybatis的运行行为 -->
<!-- <settings></settings> -->
<!-- 别名定义 -->
<typeAliases>
<!-- 针对单个别名定义 -->
<!-- type:类型的全路径 -->
<!-- alias:别名 -->
<!-- <typeAlias type="mybatis.test1.pojo.Student" alias="student"/> -->
<!-- 批量别名定义 -->
<!-- mybaits会自动扫描包中的pojo类,自动定义别名,别名就是类名,首字母大写或小写 -->
<package name="mybatis.test1.pojo"/>
</typeAliases>
<!-- 类型处理器,进行java类型和jdbc类型的映射 -->
<!-- 一般自带的映射已经足够,不需要自定义 -->
<!-- <typeHandlers></typeHandlers> -->
<!-- 和spring整合后environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用JDBC事务管理 -->
<transactionManager type="JDBC">
<!-- 数据库连接池 -->
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<!-- url中的字符[&]需要用&进行转义,在配置文件中则不需要 -->
<!-- serverTimezone:设置数据库的时区 -->
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 映射配置(加载映射文件) -->
<mappers>
<!-- 通过resource一次加载一个映射文件 -->
<!-- <mapper resource="mapper/StudentMapper.xml"/> -->
<!-- 通过mapper接口加载映射文件 -->
<!-- mapper接口的类名与mapper.xml类名一致,且在一个目录中(前提:使用mapper代理) -->
<!-- <mapper class="mybatis.test1.mapper.StudentMapper"/> -->
<!-- 批量加载mapper接口 -->
<!-- 遵循上面通过mapper接口加载的规范 -->
<pac