MyBatis 基本操作
环境: myEclipse + tomcat8.5 + jdk11
mybatis-3.5.2.jar
目录
sqlMapConfig.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="db.properties"/>
<!-- 为QingwaMapper.xml 中的参数类型起别名
默认类型不用写全包名是因为系统自带了
-->
<typeAliases>
<!-- 按照类名 -->
<!-- <typeAlias type="com.cjh.bean.Qingwa" alias="qingwa"/> -->
<package name="com.cjh.bean"/>
</typeAliases>
<!-- 在集成spring 时不用 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc 事务 -->
<transactionManager type="JDBC"/>
<!-- 使用连接池 链接数据库 -->
<dataSource type="POOLED">
<!-- 下面这是固定的写法(写死了)
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/py13"/>
<property name="username" value="root"/>
<property name="password" value="123456789"/>
-->
<!-- 这种是通过配置文件获取 -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 配置映射器的位置 推荐使用第四种 -->
<mappers>
<!-- 1 通过相对路径配置 -->
<!-- <mapper resource="mapper/QingwaMapper.xml"/> -->
<!-- 2 通过绝对路径 -->
<!-- <mapper resource="xxx/xxx/xx"/> -->
<!-- 3 通过全包名(实现方法的mapper.java 文件)
此方法必须吧xml 文件和java 文件放在统一目录且名字相同
-->
<!-- <mapper class="com.cjh.mapper.QingwaMapper"/> -->
<!-- 4. 以包的形式 一次可以配置多个 但是xml 和 java 文件必须在同一目录(复制一份xml 文件放在包中) -->
<package name="com.cjh.mapper"/>
</mappers>
</configuration>
log4j.properties(日志文件)
#Global logging configuration
log4j.rootLogger=DEBUG,stdout
#Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConvaersionPattern=%5p[%t]-%m%n
com.cjh.mapper 文件夹下
QingwaMapper.java与QingwaMapper.xml对应
QingwaMapper.java
public interface QingwaMapper {
/**
* @author caijiehao
* mapper动态代理四大原则
* 1 : 方法名与mapper.xml 中 调用sql语句 的id 一致
* 2 : 返回值类型与 mapper 中 resultType 一致
* 3 : 形参类型与 mapper 中parameterType 一致
* 4 : mapper.xml 中 namespace 必须与借口全包名一致
* 5 : 注意 在mapper 动态代理中 selectOne 还是selectList 根据返回值类型自动选择
* */
// 通过id 查询用户
public Qingwa selectQingwaById(Integer id);
// 通过用户名模糊查询 获取用户列表
public List<Qingwa> selectQingwaByName(String title);
// 添加用户
public void insertQingwa(Qingwa qingwa);
// 修改用户
public void updataQingwa(Qingwa qingwa);
QingwaMapper.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">
<mapper namespace="com.cjh.mapper.QingwaMapper">
<!-- 使用#{} 代替 ? 传值 -->
<!-- <select id="selectQingwaById" parameterType="Integer" resultType="com.cjh.bean.Qingwa" > -->
<select id="selectQingwaById" parameterType="Integer" resultType="Qingwa" >
select * from qingwa where id = #{id}
</select>
<!-- 模糊查询 使用 ${} -->
<select id="selectQingwaByName" parameterType="String" resultType="com.cjh.bean.Qingwa" >
<!-- 这种容易sql注入 -->
<!-- select * from qingwa where laiyuan like '%${value}%' -->
<!-- 推荐使用 -->
select * from qingwa where laiyuan like "%"#{value}"%"
</select>
<!-- 添加用户 -->
<insert id="insertQingwa" parameterType="com.cjh.bean.Qingwa">
insert into qingwa values(null,#{title},#{laiyuan},#{shijian})
</insert>
<!-- 修改用户 -->
<update id="updataQingwa" parameterType="com.cjh.bean.Qingwa" >
update qingwa set laiyuan=#{laiyuan},shijian=#{shijian} where title=#{title}
</update>
</mapper>
com.cjh.test 测试类
public class MapperTest {
@Test // 简单查询
public void selectQingwaById() throws IOException {
String res = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(res);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = ssf.openSession();
QingwaMapper mapper = session.getMapper(QingwaMapper.class);
Qingwa qingwa = mapper.selectQingwaById(150);
System.out.println(qingwa);
}
@Test // 模糊查询
public void selectQingwaByName() throws IOException {
String res = "sqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(res);
SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = ssf.openSession();
QingwaMapper mapper = session.getMapper(QingwaMapper.class);
List<Qingwa> list = mapper.selectQingwaByName("电脑");
for (Qingwa qingwa2 : list) {
System.out.println(qingwa2);
}
}
}