相信大家在学习MyBatis之前肯定对于项目的创建已经熟到想吐的地步了吧(哈哈)
在这里就不从零开始创建项目了,请读者自行创建项目(在这里创建简单的Java项目就行,注意环境的配置,jar包等不要漏了)
SqlMapConfig简单配置
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql;//localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
dataSource>
environment>
environments>
//加载配置文件
<mappers>
<mapper resource="User.xml"/>
mappers>
configuration>
在映射文件中配置相关配置、SQL语句等
映射文件命名:
User.xml配置文件:
namespace命名空间,作用就是对sql进行分类化管理,理解SQL隔离
注意:使用mapper代理方法开发,namespace有特殊重要的作用
<mapper namespace="test">
mapper>
通过ID查询用户记录、select执行数据库查询
参数说明
ID:标识映射文件的SQL
将SQL语句封装到mappedStatement对象中,所以将ID称为statement的id
parameterType:指定输入参数的类型
#{}表示一个占位符
#{id}:其中的id表示接收输入的参数,参数名称就是id,如果输入参数是简单类型,#{}中的参数名可以任意,可以value或其他名称
resultType:指定SQL输出结果的所映射的Java对象类型,select指定resultType表示将单条记录映射成Java对象
代码示例
<select id="findUserById" parameterType="int" resultType="User全路径">
SELECT * FROM USER WHERE id=#{id}
select>
根据用户名称模糊查询用户信息,可以返回多条
参数说明
resultType:指定就是单条记录所映射的Java对象类型
${}:表示拼接SQL串,将接收到参数的内容不加任何修饰拼接在SQL中
使用${}拼接SQL,可能会引起SQL注入
${value}:接收输入参数的内容,如果传入类型是简单类型,${}中只能使用value
代码示例
<select id="findUserByName" parameterType="java.lang.String" resultType="User全路径">
SELECT * FROM USER WHERE id LIKE '%${value}%'
select>
INSERT基本说明
参数说明
parameterType:指定输入参数类型是pojo(包括用户信息)
id:唯一标识
#{}中指定pojo的属性名,接收到pojo对象的属性值,mybatis通过OGNL获取对象的属性值
代码示例
id="insertUser" parameterType="User全路径">
insert into user(id,name,password) value(#{id},#{name},#{password})
自增ID插入数据返回ID
在绝大部分的时候,我们进行插入表记录的时候,都需要进行ID的返回,接下来我们讨论的是在增加了表记录后,将ID返回在对象属性中
基本原理:将插入数据的主键返回,返回到user对象中
参数说明
代码示例
"insertUser" parameterType="User全路径">
//将插入数据的主键返回,返回到user对象中
"id" oder="AFTER" resultType="java.lang.Integer">
SELECT LAST_INSERT_ID()
insert into user(id,name,password) value(#{id},#{name},#{password})
非自增ID的情况插入数据返回ID
使用MySQL的UUID()生成主键
执行过程:
代码示例
id="insertUser" parameterType="User全路径">
"id" oder="BEFORE" resultType="java.lang.String">
SELECT uuid()
insert into user(id,name,password) value(#{id},#{name},#{password})
需要传入用户id
需要传入用户的更新信息
parameterType指定user对象,根据id和更新信息,注意,id为必须值
name},birthday=#{birthday} where id=#{id}
说明:
为节约篇幅和更利于读者阅读,测试代码中已经书写了CRUD的测试,用户在实际测试中应分开编写
@Test
public void findUserByIdTest(){
try{
//mybatis配置文件
String resource = "SqlMapConfig.xml";
//得到配置文件流
InputStream inputStream = Resource.getResourceAsStream(resource);
//创建会话工厂,传入mybatis的配置文件信息
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
//1、通过SqlSession查询数据库
//第一个参数:映射文件中statement的id,等于 namespace+"."+statement的id
//第二个参数:指定和映射文件所匹配的parameterType类型的参数
//结果返回的是与映射文件中所匹配的resultType类型的对象
User user = (User) sqlSession.selectOne("test.findUserById",1);
//进行操作的代码
//2、插入数据
sqlSession.insert("test.insertUser",user);
//提交事务
sqlSession.commit();
//3、删除用户
sqlSession.delete("test.deleteUser",id值);
//提交事务
sqlSession.commit();
//4、更新用户信息
sqlSession.update("test.updateUser",user);
//提交事务
sqlSession.commit();
} catch(Exception e){
} finally {
//释放资源
sqlSession.close();
}
}