一、Mybaits之增、删、改、查
上一节已经介绍了Mybaits的搭建环境,下面演示Mybaits的增、删、改、查。以数据库中的users表为例,表中有id、name、age三个字段。
1、首先建立表对应的bean
package com.lzj.mybaits.test1;
public class User {
private int id;
private String name;
private int age;
public User() {
super();
}
public User(int id, String name, int age) {
super();
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age + "]";
}
}
2、定义sql的xml映射文件userMapper.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="com.lzj.mybaits.test1.userMapper">
<!-- parameterType指定插入表时,传入的是一个User对象,需要把User对应的对象的属性的值插入到数据库中 -->
<!-- values(#{id}, #{name}, #{age}中的id、name、age的名字一定要和User类中的属性的名字相同,根据反射,通过名字一一进行匹配的 -->
<insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
insert into users(id,
name, age) values(#{id}, #{name}, #{age})
</insert>
<!-- parameterType指定删除表时,传入的是一个int类型数据 -->
<!-- #{id}中的id名字不一定要与User中的id属性名相同,因为只传入了一个参数,不用一一对应 -->
<delete id="deleteUser" parameterType="int">
delete from users where
id=#{id}
</delete>
<!-- parameterType指定更新表时,传入的是一个User对象,需要把User对应的对象的属性的值更新到数据库中 -->
<!-- #{id}, #{name}, #{age}中的id、name、age一定要与User类中的属性名一一对应,通过反射把数据更新到表中 -->
<update id="updUser" parameterType="com.lzj.mybaits.test1.User">
update users set
name=#{name},age=#{age} where id=#{id}
</update>
<!--resultType指定返回的类型为User类型-->
<select id="getUser" parameterType="int" resultType="com.lzj.mybaits.test1.User">
select *
from users where id=#{id}
</select>
<select id="selectAllUser" resultType="com.lzj.mybaits.test1.User">
select * from Users
</select>
</mapper>
3、定义mybaits的配置文件conf.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>
<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/lzj_database" />
<property name="username" value="root" />
<property name="password" value="lzjlzj" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/lzj/mybaits/test1/userMapper.xml"/>
</mappers>
</configuration>
4、创建测试类
由于增、删、改、查都需要先获取SqlSessionFactory,所以先定义一个公共类MybaitsUtil ,用于获取SqlSessionFactory对象。
package com.lzj.mybaits.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.lzj.mybaits.test1.MybaitsTest;
public class MybaitsUtil {
public static SqlSessionFactory getFactory(){
String resource = "conf.xml";
InputStream in = MybaitsTest.class.getClassLoader().getResourceAsStream(resource);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
return factory;
}
}
创建测试类,测试增、删、该、查
package com.lzj.mybaits.test1;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import com.lzj.mybaits.util.MybaitsUtil;
public class MybaitsTest {
public static void main(String[] args) throws Exception {
// testInsert();
// testUpd();
// testDelete();
// testSelectOne();
testSelectAll();
}
public static void testInsert(){
SqlSessionFactory factory = MybaitsUtil.getFactory();
/*默认设置手动提交事务的*/
SqlSession session = factory.openSession();
String statement = "com.lzj.mybaits.test1.userMapper.insertUser";
int insertNum = session.insert(statement, new User(4, "zhangsan", 21));
System.out.println("insertNum = " + insertNum);
/*手动提交事务*/
/*如果此处不想手动提交数据,可以在factory.openSession(true),表示插入数据时自动提交事务*/
session.commit();
/*关闭事务*/
session.close();
}
public static void testUpd(){
SqlSessionFactory factory = MybaitsUtil.getFactory();
/*自动提交事务*/
SqlSession session = factory.openSession(true);
String statement = "com.lzj.mybaits.test1.userMapper.updUser";
int updateNum = session.update(statement, new User(3, "lzj", 25));
System.out.println("updateNum = " + updateNum);
session.close();
}
public static void testDelete(){
SqlSessionFactory factory = MybaitsUtil.getFactory();
/*自动提交事务*/
SqlSession session = factory.openSession(true);
String statement = "com.lzj.mybaits.test1.userMapper.deleteUser";
int deleteNum = session.delete(statement, 4);
System.out.println("deleteNum = " + deleteNum);
session.close();
}
public static void testSelectOne(){
SqlSessionFactory factory = MybaitsUtil.getFactory();
/*自动提交事务*/
SqlSession session = factory.openSession(true);
String statement = "com.lzj.mybaits.test1.userMapper.getUser";
User user = session.selectOne(statement, 3);
System.out.println(user);
session.close();
}
public static void testSelectAll(){
SqlSessionFactory factory = MybaitsUtil.getFactory();
/*自动提交事务*/
SqlSession session = factory.openSession(true);
String statement = "com.lzj.mybaits.test1.userMapper.selectAllUser";
List<User> list = session.selectList(statement);
System.out.println(list);
session.close();
}
}
二、注意事项
1、<properties></properties>标签的用法
为了简化在conf.xml配置文件中的配置,可以在外面文件配置好,然后用<properties> 标签导入到conf.xml文件中,例如在src下创建db.properties文件,文件中配置数据源,如下所示
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/lzj_database
username=root
password=lzjlzj
然后在conf.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>
<!--导入db.properties的配置文件,并在后面通过${}引用文件中键;也可以用properties标签的子标签property中的name和value覆盖db.properties文件中的键值对;
resource表示从类路径下导入外部文件;
url表示从网络或者磁盘中导入文件-->
<properties resource="db.properties"></properties>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper class="com.lzj.mybaits.test1.UserMapper"/>
</mappers>
</configuration>
2、<typeAliases>标签的用法
- typeAliases标签中typeAlias子标签
在sql的userMapper.xml映射文件中,书写增、删、改、查语句时,例如:
<insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
insert into users(id,
name, age) values(#{id}, #{name}, #{age})
</insert>
parameterType属性或其它属性中类型名过长,可以通过定义别名的形式来实现,在conf.xml配置文件中定义com.lzj.mybaits.test1.User的别名,如下所示:
<typeAliases>
<typeAlias type="com.lzj.mybaits.test1.User" alias="userTest"/>
</typeAliases>
在sql的映射文件userMapper.xml中就可以通过别名userTest来定义
<insert id="insertUser" parameterType="userTest">
insert into users(id,
name, age) values(#{id}, #{name}, #{age})
</insert>
- typeAliases标签中package的子标签
在书写sql的映射文件userMapper.xml时,
<insert id="insertUser" parameterType="com.lzj.mybaits.test1.User">
insert into users(id,
name, age) values(#{id}, #{name}, #{age})
</insert>
parameterType中包的名字太长,如果sql语句很多,书写不方便,可以在conf.xml配置文件中指定包,例如
<typeAliases>
<package name="com.lzj.mybaits.test1"/>
</typeAliases>
指定包名后,在sql的映射文件userMapper.xml中就可以直接写类的名字,而不用带包名了。
<insert id="insertUser" parameterType="User">
insert into users(id,
name, age) values(#{id}, #{name}, #{age})
</insert>
这里写代码片工程目录如图所示
2696

被折叠的 条评论
为什么被折叠?



