目录结构:
输出结果:
项目文件:
log4j.properties
log4j.rootLogger=debug,stdout,FILE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
# mybatis show sql log message on console
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
#output log to a file
#log4j.rootLogger=debug,FILE
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=log.txt
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
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>
<!-- 标准日志输出: 此配置方式不需要log4j。properties-->
<!-- <settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings> -->
<typeAliases>
<!--给实体类起一个别名 user 不过建议不要起别名,容易搞混-->
<typeAlias type="User" alias="User" />
</typeAliases>
<!--数据源配置 这块用 Oracle数据库 -->
<environments default="development">
<environment id="development">
<transactionManager type="jdbc" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />
<property name="username" value="txp" />
<property name="password" value="123" />
</dataSource>
</environment>
</environments>
<mappers>
<!--UsersMapper.xml装载进来 同等于把“dao”的实现装载进来 -->
<mapper resource="UsersMapper.xml" />
</mappers>
</configuration>
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">
<!--这块等于dao接口的实现 namespace必须和接口的类路径一样-->
<mapper namespace="UsersMapper" >
<!-- Result Map 结果集映射-->
<resultMap type="User" id="BaseResultMap">
<result property="id" column="id" />
<result property="name" column="name" />
<result property="sex" column="sex" />
<result property="birs" column="birs" jdbcType="TIMESTAMP"/>
<result property="message" column="message"/>
</resultMap>
<!-- 表名-->
<sql id="Tabel_Name">
t_users
</sql>
<!-- 表中所有列 -->
<sql id="Base_Column_List" >
id,name,sex,birs,message
</sql>
<!-- 查询条件 -->
<sql id="Example_Where_Clause">
where 1=1
<trim suffixOverrides=",">
<if test="id != null">
and id = #{id}
</if>
<if test="name != null and name != ''">
and name like concat(concat('%', '${name}'), '%')
</if>
<if test="sex != null and sex != ''">
and sex like concat(concat('%', '${sex}'), '%')
</if>
<if test="birs != null">
and birs = #{birs}
</if>
<if test="message != null">
and message = #{message}
</if>
</trim>
</sql>
<!-- 下面的id都和接口UsersMapper中的方法名一样-->
<!-- 1.新增记录 -->
<insert id="add" parameterType="Object" >
<selectKey resultType="int" order="BEFORE" keyProperty="id">
select seq_t_users_id.nextval as id from dual
</selectKey>
insert into t_users(id,name,sex,birs,message) values(#{id},#{name},#{sex},#{birs},#{message})
</insert>
<!-- 2.根据id修改记录-->
<update id="update" parameterType="Object" >
update t_users set name=#{name},sex=#{sex},birs=#{birs},message=#{message} where id=#{id}
</update>
<!-- 3.只修改不为空的字段 -->
<update id="updateBySelective" parameterType="Object" >
update t_users set
<trim suffixOverrides="," >
<if test="name != null and name != '' ">
name=#{name},
</if>
<if test="sex != null and sex != '' ">
sex=#{sex},
</if>
<if test="birs != null ">
birs=#{birs},
</if>
<if test="message != null and message != '' ">
message=#{message},
</if>
</trim> where id=#{id}
</update>
<!-- 4.根据id进行删除 -->
<delete id="delete" parameterType="Object">
delete from t_users where id = #{id}
</delete>
<!-- 5.查询列表 -->
<select id="queryList" resultMap="BaseResultMap" parameterType="Object">
select
<include refid="Base_Column_List" />
from t_users
<include refid="Example_Where_Clause"/>
</select>
</mapper>
User.java
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @desc:用户实体类
* @author 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
*/
public class User {
/**
* 名字.
*/
private String name;
/**
* 性别。
*/
private String sex;
/**
* id。
*/
private Integer id;
/**
* 生日。
*/
private Date birs;
/**
* 信息。
*/
private String message;
/**
* @desc:获取名字的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @return String
*/
public String getName() {
return name;
}
/**
* @desc:设置名字的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param name void
*/
public void setName(String name) {
this.name = name;
}
/**
* @desc:获取性别的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @return String
*/
public String getSex() {
return sex;
}
/**
* @desc:设置性别的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param sex void
*/
public void setSex(String sex) {
this.sex = sex;
}
/**
* @desc:获取id的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @return Integer
*/
public Integer getId() {
return id;
}
/**
* @desc:设置id的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param id void
*/
public void setId(Integer id) {
this.id = id;
}
/**
* @desc:获取生日的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @return Date
*/
public Date getBirs() {
return birs;
}
/**
* @desc:设置生日的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param birs void
*/
public void setBirs(Date birs) {
this.birs = birs;
}
/**
* @desc:获取信息的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @return String
*/
public String getMessage() {
return message;
}
/**
* @desc:设置消息的值
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param message void
*/
public void setMessage(String message) {
this.message = message;
}
/**
* @desc:无参数构造方法
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
*/
public User() {
super();
}
/**
* @desc:构造方法
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
* @param name
* @param sex
* @param id
* @param birs
* @param message
*/
public User(String name, String sex, Integer id, Date birs, String message) {
super();
this.name = name;
this.sex = sex;
this.id = id;
this.birs = birs;
this.message = message;
}
/**
* @desc:返回注入实体类信息字符串
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
* @return String
*/
@Override
public String toString() {
SimpleDateFormat sdf = new SimpleDateFormat("YYYY-MM-DD");
return "用户 姓名=" + name + ", 性别:" + (sex = sex.equals("0")?"男":"女") + ", id=" + id + ", 生日:"
+ sdf.format(birs) + ", 信息:" + message + "]";
}
}
UserMapper.java
import java.util.List;
/**
* @desc:用户映射接口,声明增删改查方法。
* @author 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
*/
public interface UsersMapper {
/**
* @desc:添加用户
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param t void
*/
public void add(User t);
/**
* @desc:修改用户
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param t void
*/
public void update(User t);
/**
* @desc:删除用户
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param integer void
*/
public void delete(Integer integer);
/**
* @desc:根据id查询用户信息
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param id 用户id
* @return User
*/
public User queryById(User id);
/**
* @desc:根据用户信息查询,返回用户信息列表
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param t 用户
* @return List<User>
*/
public List<User> queryList(User t);
}
main.java
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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;
/**
* @desc:测试类
* @author 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
*/
public class main {
/**
* 获得MyBatis SqlSessionFactory
* SqlSessionFactory负责创建SqlSession,一旦创建成功,就可以用SqlSession实例来执行映射语句,commit,rollback,close等方法。
* @return
*/
private static SqlSessionFactory getSessionFactory() {
SqlSessionFactory sessionFactory = null;
String resource = "Config.xml";
try {
sessionFactory = new SqlSessionFactoryBuilder()
.build(Resources.getResourceAsReader(resource));
} catch (IOException e) {
e.printStackTrace();
}
return sessionFactory;
}
/**
* @desc:main方法
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月25日
* @param args void
* @throws java.text.ParseException
*/
public static void main(String[] args) throws ParseException {
SqlSession sqlSession = getSessionFactory().openSession();
UsersMapper dao = sqlSession.getMapper(UsersMapper.class);
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
User user = new User(); //构造空值对象,清空查询条件。
User user1 = new User("hulu", "0", null,df.parse("1999-07-08"), "我是葫芦娃");
User user2 = new User("zhangalj", "1", null, df.parse("1998-08-21"), "我是张励娟");
User user3 = new User("qingq", "0", null, df.parse("1975-01-12"), "我是秦光庆");
User user4 = new User("zhanghj", "0", null, df.parse("1995-04-01"), "我是张翰姜");
List<User> list = dao.queryList(user); //所有信息
System.out.println("原始信息:---->:");
output(list); //循环打印信息列表
delete(list,dao); //删除所有的信息
list = dao.queryList(user); //查询删除后的所有信息
System.out.println("删除所有信息后:---->:");
output(list); //循环打印信息列表
//新增4条信息
dao.add(user1);
dao.add(user2);
dao.add(user3);
dao.add(user4);
list = dao.queryList(user); //查询新增后的信息
System.out.println("新增之后---->:");
output(list); //循环打印信息列表
list = dao.queryList(user1); //查询user1的信息
delete(list,dao); //删除user1:hulu的信息
list = dao.queryList(user); //查询删除user1后的信息
System.out.println("删除hulu之后---->:");
output(list); //循环打印信息列表
update(list,dao);//修改用户信息
list = dao.queryList(user); //查询更新后的信息
System.out.println("更新之后---->:");
output(list); //循环打印信息列表
sqlSession.commit();//提交事物否则无法对将数据写入数据库。
sqlSession.close();//关闭session
}
/**
* @desc:循环打印信息列表
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
* @param list
*/
public static void output(List<User> list){
if(list != null) {//循环打印信息列表
System.out.println("*************************************"
+ "******************************");
for(User u : list) {
System.out.println(u.toString());
}
System.out.println("**************************************"
+ "*****************************");
}
}
/**
* @desc:删除用户
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
* @param list
*/
public static void delete(List<User> list,UsersMapper dao){
if(list != null) {
for(User u : list) {
dao.delete(u.getId());
}
}
}
/**
* @desc:修改用户
* @auther 水晶之痕:帅得6,帅得6,六夺帅
* @date 2017年10月26日
* @param list void
*/
public static void update(List<User> list,UsersMapper dao){
if(list != null) {//循环更新信息
for(User u : list) {
u.setSex("1");
u.setMessage("我们统一一下性别为女!");
dao.update(u); //更新
}
}
}
}
数据库表