一、加入相应的jar包,可以在maven官网去搜寻相关代码复制粘贴到pom.xml文件中,如图:
这里用到的有Mybatis、junit、log4i、mysql四个jar包.
二、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.ConversionPattern=%5p [%t] - %m%n
三、核心配置文件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>
<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/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root" />
<property name="password" value="1110" />
</dataSource>
</environment>
</environments>
<!-- 加载map的映射文件 -->
<mappers>
<!-- 加载User.xml文件 -->
<mapper resource="com/lanqiao/po/User.xml" />
</mappers>
</configuration>
四、po类
持久化=po类+po类的映射文件,这两个文件都要在同一个文件目录,而且名字相同,如图:
po类其实就是一个javabean,里面声明各种get/set方法,以及有参无参的方法。po.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="test">
<!--
查询:
id:对应的就是方法名
parameterType:对应的方法中参数的类型(int String...)
resultType:方法返回的类型
-->
<select id="findUserById" parameterType="int" resultType="com.lanqiao.po.User">
select * from user where id=#{id}
</select>
<!-- 通过name模糊查询 除了模糊查询用'%${value}%',其他的用#-->
<select id="findUserByName" parameterType="java.lang.String" resultType="com.lanqiao.po.User">
select * from user where username like '%${value}%'
</select>
<!-- 添加用户 -->
<insert id="insertUser" parameterType="com.lanqiao.po.User">
<!-- 步骤一:添加主键 ,指定主键的生成策略(不同的数据库不同)-->
<selectKey keyProperty="id" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
<!-- 步骤二:添加其他 -->
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address});
</insert>
<!-- 删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from user where id=#{id}
</delete>
<!-- 修改用户 -->
<update id="updateUser" parameterType="com.lanqiao.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address}
where id=#{id}
</update>
</mapper>
五、测试类
首先要加载SqlMapConfig.xml文件:String resources="SqlMapConfig.xml";
然后new一个工厂对象sqlSessionFactory:sqlSessionFactory= new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resources));
接着获取sqlSesson对象,有了sqlSession对象才能对数据进行增删改查:SqlSession sqlSession=sqlSessionFactory.openSession();
具体代码如下:
package com.lanqiao.test;
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.Before;
import org.junit.Test;
import com.lanqiao.po.User;
public class UserTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void creatSqlSessionFactory(){
try {
//1、加载SqlMapConfig.xml文件
String resources="SqlMapConfig.xml";
//工厂对象
sqlSessionFactory= new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(resources));
System.out.println("sqlSessionFactory:"+sqlSessionFactory);
} catch (Exception e) {
e.printStackTrace();
}
}
//通过id查询用户对象
@Test
public void testFindUserById(){
try {
//2、获取sqlSession对象才能对数据进行增删改查
SqlSession sqlSession=sqlSessionFactory.openSession();
//sqlSession.selectOne("空间名 .id名",传递的参数值);在po文件里面(User.xml)
User user=sqlSession.selectOne("test.findUserById", 10);
System.out.println("id:"+user.getId());
System.out.println("名字:"+user.getUsername());
System.out.println("地址:"+user.getAddress());
//3、关闭sqlSession
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//通过name模糊查询用户对象
@Test
public void testFindUserByName(){
try {
//2、获取sqlSession对象才能对数据进行增删改查
SqlSession sqlSession=sqlSessionFactory.openSession();
//sqlSession.selectOne("空间名 .id名",传递的参数值);在po文件里面(User.xml)
List<User> userList=sqlSession.selectList("test.findUserByName", "小");
for (User user : userList) {
System.out.println(user.getId()+"\t"+user.getUsername()+"\t"+user.getAddress());
}
//3、关闭sqlSession
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//根据id添加用户对象
@Test
public void testInsertUser(){
try {
//2、获取sqlSession对象才能对数据进行增删改查
SqlSession sqlSession=sqlSessionFactory.openSession();
//sqlSession.selectOne("空间名 .id名",传递的参数值);在po文件里面(User.xml)
User user=new User();
user.setAddress("广西百色市");
user.setBirthday(new Date());
user.setSex("女");
user.setUsername("小韦");
sqlSession.insert("test.insertUser", user);
//事物的提交(注:mybatis必须要手动提交,否则在数据库内找不到相关的记录)
sqlSession.commit();
//3、关闭sqlSession
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//根据id删除用户对象
@Test
public void testDeleteUserById(){
try {
//2、获取sqlSession对象才能对数据进行增删改查
SqlSession sqlSession=sqlSessionFactory.openSession();
//sqlSession.selectOne("空间名 .id名",传递的参数值);在po文件里面(User.xml)
sqlSession.delete("test.deleteUserById", 10);
//事物的提交(注:mybatis必须要手动提交,否则在数据库内找不到相关的记录)
sqlSession.commit();
//3、关闭sqlSession
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//根据id修改用户对象
@Test
public void testUpdateUser(){
try {
//2、获取sqlSession对象才能对数据进行增删改查
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findUserById", 1);
// user.setId(1);
// user.setUsername("王五");
// user.setBirthday(new Date());
// user.setAddress("广西柳州市");
user.setSex("男");
//sqlSession.selectOne("空间名 .id名",传递的参数值);在po文件里面(User.xml)
sqlSession.update("test.updateUser", user);
//事物的提交(注:mybatis必须要手动提交,否则在数据库内找不到相关的记录)
sqlSession.commit();
//3、关闭sqlSession
sqlSession.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
声明:数据库文件的user表: