Mybatis的Jar包下载:https://pan.baidu.com/s/16P-MGgn53e1EtCL6wQ9VWA 密码:1azq
Mybatis架构:
src/sqlMapConfig.xml(Mybatis的核心配置文件):
<?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"/>
<!-- 为类型配置别名 -->
<typeAliases>
<!-- <typeAlias type="com.xxx.mybatis.pojo.User" alias="User"/> -->
<!-- 该包及其子包下的所有类都会自动取简单类名为别名,且别名首字母大小写都可以 -->
<package name="com.xxx.mybatis.pojo"/>
</typeAliases>
<!-- 连接数据库的参数配置。和spring整合后 environments配置将废除 -->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理 -->
<transactionManager type="JDBC" />
<!-- 数据库连接池 -->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}" />
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<!-- 加载外部实体类的Sql映射文件 -->
<mappers>
<!-- 使用resource配置Sql映射文件,xml映射文件的名字和位置比较灵活 -->
<mapper resource="sqlmap/User.xml" /> <!-- resource和class和url只能配置其中一个 -->
<!-- <mapper class="com.xxx.mybatis.pojo.User" /> --> <!-- 使用class定位User.xml的位置。必须满足User.xml的名字和位置与User类相同 -->
<!-- <mapper url="c://User.xml" /> --> <!-- 根据绝对路径定位User.xml的位置,不推荐 -->
<package name="com.xxx.mybatis.pojo" /> <!-- 该包下的所有类对应的xml映射文件都会包含进来(推荐)。必须满足该包下的xml文件的名字和位置与对应类相同 -->
</mappers>
</configuration>
sqlmap/User.xml(实体类的Sql映射文件,配置原生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">
<!-- 配置原生Sql语句 -->
<mapper namespace="UserMapper"> <!-- 命名空间namespace一般设置为Dao层接口全类名"com.xxx.mybatis.mapper.UserMapper" -->
<!-- 通过ID查询一个用户。resultType:数据库中表的字段要和User实体类中的属性保持对应(如果不对应可以使用resultMap标签配置映射关系) -->
<select id="findUserById" parameterType="Integer" resultType="User"> <!-- 可以在sqlMapConfig.xml配置文件中配置"com.xxx.mybatis.pojo.User"类型的别名为User -->
select * from user where id = #{v} <!-- #{v}中的v就表示传入的Integer类型的参数 (OGNL表达式) -->
</select>
<!-- 根据用户名称模糊查询用户列表 -->
<!--
#{}表示占位符 '%#{v}%' ==> '%'五'%' (String类型会自动带引号)
${}表示字符串拼接(不能防SQL注入) '%${value}%' ==> '%五%' ${value}中只能填value。 "%"#{haha}"%"可以防SQL注入
-->
<select id="findUserByUsername" parameterType="String" resultType="com.xxx.mybatis.pojo.User">
select * from user where username like "%"#{haha}"%"
</select>
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.xxx.mybatis.pojo.User">
<!-- 插入成功后,将生成的主键id注入到user对象中。 keyProperty的"id"要和User实体类中的属性保持一致 -->
<selectKey keyProperty="id" resultType="Integer" order="AFTER"> <!-- MySql中的自增主键用AFTER(先插入,后生成主键)。UUID用BEFORE -->
select LAST_INSERT_ID()
</selectKey>
insert into user (username,birthday,address,sex)
values (#{username},#{birthday},#{address},#{sex})
<!-- #{username}中的"username"要和User实体类中的属性名保持对应。 (OGNL表达式) -->
</insert>
<!-- 更新 -->
<update id="updateUserById" parameterType="com.xxx.mybatis.pojo.User">
update user
set username = #{username},sex = #{sex},birthday = #{birthday},address = #{address}
where id = #{id}
</update>
<!-- 删除 -->
<delete id="deleteUserById" parameterType="Integer">
delete from user where id = #{vvvvv}
</delete>
</mapper>
MybatisTest.java(测试类):
package com.xxx.mybatis.junit;
import java.io.InputStream;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.xxx.mybatis.pojo.User;
public class MybatisTest {
@Test
public void testMybatis() throws Exception {
//加载核心配置文件
String path = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(path);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行Sql语句 ("UserMapper"是User.xml中mapper的命名空间名;"findUserById"是User.xml中配置的sql语句的id)
User user = sqlSession.selectOne("UserMapper.findUserById", 10); //参数一:User.xml中配置的Sql语句(命名空间.id); 参数二:Sql语句中代替占位符的参数
System.out.println(user);
}
//根据用户名称模糊查询用户列表
@Test
public void testfindUserByUsername() throws Exception {
//加载核心配置文件
String path = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(path);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行Sql语句
List<User> users = sqlSession.selectList("UserMapper.findUserByUsername", "五");
for (User user2 : users) {
System.out.println(user2);
}
}
//添加用户
@Test
public void testInsertUser() throws Exception {
//加载核心配置文件
String path = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(path);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行Sql语句
User user = new User();
user.setUsername("张三");
user.setBirthday(new Date());
user.setAddress("sadfsafsafs");
user.setSex("男");
int i = sqlSession.insert("UserMapper.insertUser", user); //返回受影响行数
sqlSession.commit(); //提交事务才会生效
System.out.println(user.getId()); //需要在User.xml中的Mapper中配置<selectKey />标签才能将插入后的id赋给user对象。
}
//更新用户
@Test
public void testUpdateUserById() throws Exception {
//加载核心配置文件
String path = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(path);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//执行Sql语句
User user = new User();
user.setId(29); //根据id修改用户,必须设置id
user.setUsername("张三292929");
user.setBirthday(new Date());
user.setAddress("222222sadfsafsafs");
user.setSex("女");
int i = sqlSession.update("UserMapper.updateUserById", user);
sqlSession.commit(); //提交事务才会生效
}
//删除
@Test
public void testDelete() throws Exception {
//加载核心配置文件
String path = "sqlMapConfig.xml";
InputStream in = Resources.getResourceAsStream(path);
//创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
//创建SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("UserMapper.deleteUserById", 29);
sqlSession.commit(); //提交事务才会生效
}
}
src/ jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123