使用MyBatis对表CRUD操作
具体操作如下:
1)创建工程,并导入mybatis.jar的夹包
2) 在src下编写MyBatis的配置文件(mybatis-config.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>
<!-- 引入 jdbc.properties 文件 -->
<properties resource="jdbc.properties" />
<environments default="development">
<environment id="development">
<!--配置事务管理,采用JDBC的事务管理 -->
<transactionManager type="JDBC" />
<!-- 配置数据库连接信息 -->
<!-- POOLED:mybatis自带的数据源,JNDI:基于tomcat的数据源 -->
<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>
<!-- 将mapper文件加入到配置文件中 -->
<mappers>
<mapper resource="com/hlx/dao/UserinfosMapper.xml"/>
</mappers>
</configuration>
3) 创建实体类-pojo
package com.hlx.pojo;
/**
* POJO plain old java objects ( 普通的Java对象)
* @author Administrator
*
*/
public class Userinfos {
//ctrl+shift+Y lower
//ctrl+shift+X upper
private int id;
private String uname;
private String upass;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Userinfos() {
super();
}
public Userinfos(int id, String uname, String upass) {
super();
this.id = id;
this.uname = uname;
this.upass = upass;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getUpass() {
return upass;
}
public void setUpass(String upass) {
this.upass = upass;
}
@Override
public String toString() {
return "Userinfos [id=" + id + ", uname=" + uname + ", upass=" + upass
+ "]";
}
public Userinfos(int id) {
super();
this.id = id;
}
}
4) 创建sql映射文件(Userinfosmapper.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, namespace的值设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="com.hlx.dao.UserinfosMapper"就是com.hlx.dao(包名)+UserinfosMapper(UserinfosMapper.xml文件去除后缀) -->
<mapper namespace="com.hlx.dao.UserinfosMapper">
<!-- 根据id查询得到一个user对象 parameterType参数; resultType返回collection-->
<select id="myid" parameterType="int" resultType="com.hlx.pojo.Userinfos">
select * from userinfos where id=#{id}
</select>
<!-- 1.创建用户(insert) -->
<insert id="add" parameterType="com.hlx.pojo.Userinfos">
insert into userinfos values(#{id},#{uname},#{upass})
</insert>
<!--2. 删除用户(delete) -->
<delete id="del" parameterType="int">
delete from userinfos where id=#{id}
</delete>
<!--3. 修改用户(update) parameterType:参数 -->
<update id="mod" parameterType="com.hlx.pojo.Userinfos">
update userinfos set uname=#{uname},upass=#{upass} where id=#{id}
</update>
<!--4. 查询全部用户 resultType:返回个集合 -->
<select id="list" resultType="com.hlx.pojo.Userinfos">
select * from userinfos
</select>
</mapper>
5)创建会话公共类 MyBatisUtil.java
package com.hlx.util;
import java.io.InputStream;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
/**
* 1.获取SqlSessionFactory 会话工厂对象
*
* @return
*/
public static SqlSessionFactory getSqlSessionFactory() {
String resource = "mybatis-config.xml";
// 1.加载mybatis-config.xml文件
InputStream is = MyBatisUtil.class.getClassLoader()
.getResourceAsStream(resource);
// 2.获得会话工厂对象
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
return factory;
}
/**
* 2获取SqlSession
*
* @return
*/
public static SqlSession getSqlSession() {
return getSqlSessionFactory().openSession();
}
/**
* 3获取SqlSession
*
* @param isAutocommit
* @return true 表示创建的SqlSession对象在执行完SQL之后会自动提交事务
* false 表示创建的SqlSession对象在执行完SQL之后不会自动提交事务
这时就需要我们手动调用sqlSession.commit()提交事务
*/
public static SqlSession getSqlSession(boolean isAutocommit) {
return getSqlSessionFactory().openSession(isAutocommit);
}
}
6) 测试类
package com.hlx.test;
import java.io.InputStream;
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.apache.log4j.Logger;
import org.junit.Test;
import com.hlx.pojo.Userinfos;
import com.hlx.util.MyBatisUtil;
/**
* 测试类
*
* @author Administrator
*
*/
public class UserinfoTest {
// 日志对象
private Logger logger = Logger.getLogger(UserinfoTest.class);
@Test
public void update() {
SqlSession session = null;
try {
// 获得会话
session = MyBatisUtil.getSqlSession(true);
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
String statement = "com.hlx.dao.UserinfosMapper.mod";
// 具体对象
Userinfos userinfos = new Userinfos(23, "翠花", "123456");
// 执行插入操作
int count = session.insert(statement, userinfos);
logger.debug("修改数据!");
System.out.println(count);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 对应一次数据库会话,会话结束必须关闭
}
}
@Test
public void add() {
SqlSession session = null;
try {
// 获得会话
session = MyBatisUtil.getSqlSession(true);
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
String statement = "com.hlx.dao.UserinfosMapper.add";
// 具体对象
Userinfos userinfos = new Userinfos(10, "翠花", "123456");
// 执行插入操作
int count = session.insert(statement, userinfos);
logger.debug("添加数据!");
System.out.println(count);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 对应一次数据库会话,会话结束必须关闭
}
}
@Test
public void del() {
SqlSession session = null;
try {
// 获得会话
session = MyBatisUtil.getSqlSession(true);
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
String statement = "com.hlx.dao.UserinfosMapper.del";
// 具体对象
Userinfos userinfos = new Userinfos(10);
// 执行插入操作
int count = session.insert(statement, userinfos);
logger.debug("删除数据!");
System.out.println(count);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 对应一次数据库会话,会话结束必须关闭
}
}
@Test
public void all() {
SqlSession session = null;
try {
// 获得会话
session = MyBatisUtil.getSqlSession(true);
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
String statement = "com.hlx.dao.UserinfosMapper.list";
// 执行插入操作
List<Userinfos> lists = session.selectList(statement);
logger.debug("查询数据!");
// 遍历数据
for (Userinfos userinfos : lists) {
System.out.println(userinfos);
}
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 对应一次数据库会话,会话结束必须关闭
}
}
@Test
public void getId() {
SqlSession session = null;
try {
// 获得会话
session = MyBatisUtil.getSqlSession(true);
/**
* 映射sql的标识字符串, com.hlx.dao.UserinfosMapper是userinfosMapper.
* xml文件中mapper标签的namespace属性的值,
* getUserinfo是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
*/
// 映射sql的标识字符串
String statement = "com.hlx.dao.UserinfosMapper.myid";
// 执行插入操作
Userinfos userinfos = session.selectOne(statement, 23);
logger.debug("查询数据!");
System.out.println(userinfos);
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
} finally {
session.close(); // 对应一次数据库会话,会话结束必须关闭
}
}
}
这是一个简单的CRUD的操作。