一、创建数据库表

1.1、创建表

USE `mybatis`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`name` varchar(45) NOT NULL DEFAULT '无名氏' COMMENT '用户名',
`age` tinyint(3) NOT NULL DEFAULT '' COMMENT '用户年龄',
`birthday` datetime NOT NULL DEFAULT '1970-01-01 00:00:00' COMMENT '用户生日',
`address` varchar(256) NOT NULL DEFAULT '北京' COMMENT '用户地址',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8 COMMENT='用户表'; /*Data for the table `user` */ insert into `user`(`id`,`name`,`age`,`birthday`,`address`)
values (1,'赵敏',23,'1990-01-23 20:24:21','明教'),
(2,'李四',18,'1986-12-23 12:13:11','广州'),
(3,'张五',33,'1975-09-23 02:13:11','上海'),
(4,'王六',27,'1984-11-01 11:23:14','重庆'),
(5,'张三丰',108,'1971-01-02 02:12:11','武当'),
(6,'想起 来叫什么了',22,'1984-01-23 20:23:22','魔都上海'),
(7,'呵呵',22,'1984-01-23 20:23:22','不知道是哪的'),
(8,'张无忌',18,'2015-10-28 15:31:31','明教');

二、创建项目导入Jar包

2.1、

三、创建实现类和Mybatis各个配置文件 

3.1、创建pojo类

/**
*/
package com.pb.mybatis.po; import java.util.Date; /** * @Title: User.java * @Package com.pb.mybatis.po * @ClassName User * @Description: TODO(用户类) * @author 刘楠 * @date 2015-10-30 下午4:27:05 * @version V1.0 */
public class User { //用户ID
private int id;
//用户名
private String name;
//用户年龄
private int age;
//生日
private Date birthday;
//地址
private String address;
/**
* @return the id
*/
public int getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(int id) {
this.id = id;
}
/**
* @return the name
*/
public String getName() {
return name;
}
/**
* @param name the name to set
*/
public void setName(String name) {
this.name = name;
}
/**
* @return the age
*/
public int getAge() {
return age;
}
/**
* @param age the age to set
*/
public void setAge(int age) {
this.age = age;
}
/**
* @return the birthday
*/
public Date getBirthday() {
return birthday;
}
/**
* @param birthday the birthday to set
*/
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
/**
* @return the address
*/
public String getAddress() {
return address;
}
/**
* @param address the address to set
*/
public void setAddress(String address) {
this.address = address;
}
/** (non Javadoc) * <p>Title: toString</p> * <p>Description: </p> * @return * @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age=" + age
+ ", birthday=" + birthday + ", address=" + address + "]";
} }

3.2、创建db.properties

#数据库基本配置信息
#驱动
jdbc.driver=com.mysql.jdbc.Driver
#连接URL
jdbc.url=jdbc:mysql://localhost:3306/mybatis?CharacterEncoding=utf8
#用户名
jdbc.username=root
#密码
jdbc.password=root

log4j

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# MyBatis logging configuration...
# 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

3.3、创建UserMapper与mapper.xml

/**
*/
package com.pb.mybatis.mapper; import java.util.List; import org.apache.ibatis.annotations.Param; import com.pb.mybatis.po.User; /** * @Title: UserMapper.java * @Package com.pb.mybatis.mapper * @ClassName UserMapper * @Description: TODO(用户类数据访问层Mapper接口) * @author 刘楠 * @date 2015-10-30 下午6:17:43 * @version V1.0 */
public interface UserMapper { public User findUserById(int id); /**
*
* @Title: findUserByWhere * @Description: TODO(根据条件查询用户) * @return List<User>
*/
public List<User> findUserByWhere(@Param("id") int id,@Param("name")String username); /**
*
* @Title: updateUser * @Description: TODO(修改) * @param user
* @return int
*/
public int updateUser(User user); }

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.pb.mybatis.mapper.UserMapper">
<!-- 映射 --> <resultMap type="User" id="userResultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<result property="age" column="age"/>
<result property="birthday" column="birthday"/>
<result property="address" column="address"/>
</resultMap> <select id="findUserById" parameterType="int" resultMap="userResultMap">
select * from user where id=#{id}
</select> <!-- 根据条件查询用户 -->
<select id="findUserByWhere" resultMap="userResultMap">
select * from user
<where>
<!--where会自动去掉第一个成功的条件的and和or -->
<if test="id!=null and id!='' and id!=0">
and id=#{id}
</if>
<if test="name!=null and name!=''">
or name like "%"#{name}"%"
</if>
</where>
</select> <!--修改
SET NAME=#{name},
age=#{age},
birthday=#{birthday},
address=#{address}
-->
<update id="updateUser" parameterType="User">
UPDATE USER
<!--使用SET来更新 -->
<set>
<if test="name !=null and name !=''">NAME=#{name},</if>
<if test="age !=null and age !='' and age !=0">age=#{age},</if>
<if test="birthday !=null">birthday=#{birthday},</if>
<if test="address !=null and address !=''">address=#{address}</if>
</set>
WHERE id=#{id}
</update> </mapper>

3.4、创建configuration.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>
<properties resource="db.properties" />
<typeAliases>
<!--使用默认别名 -->
<package name="com.pb.mybatis.po"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射 -->
<package name="com.pb.mybatis.mapper"/>
</mappers>
</configuration>

3.5、测试

/**
*/
package com.pb.mybatis.mapper; import static org.junit.Assert.*; import java.io.InputStream;
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.pb.mybatis.po.User; /** * @Title: UserMapperTest.java * @Package com.pb.mybatis.mapper * @ClassName UserMapperTest * @Description: TODO(用一句话描述该文件做什么) * @author 刘楠 * @date 2015-10-30 下午6:25:23 * @version V1.0 */
public class UserMapperTest { private SqlSessionFactory sqlSessionFactory; /**
*
* @Title: setUp * @Description: TODO(在每个方法前执行的方法) * @throws Exception void
*/
@Before
public void setUp() throws Exception {
String resource="configuration.xml";
InputStream in=Resources.getResourceAsStream(resource);
//获取会话工厂
sqlSessionFactory=new SqlSessionFactoryBuilder().build(in);
} @Test
public void testFindUserById() {
//获取会话
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.findUserById(1);
System.out.println(user);
} @Test
public void testFindUserByWhere() {
//获取会话
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
List<User> list=userMapper.findUserByWhere(0,"");
System.out.println(list);
} @Test
public void testUpdateUser() {
//获取会话
SqlSession sqlSession=sqlSessionFactory.openSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
User user=userMapper.findUserById(6);
System.out.println(user);
user.setBirthday(new Date()); user.setName("sssss");
user.setAddress("ddd");
int num=userMapper.updateUser(user);
sqlSession.commit();
System.out.println("num="+num); }
}

MyBatis入门(四)---动态SQL的更多相关文章

  1. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  2. mybatis入门基础----动态SQL

    原文:http://www.cnblogs.com/selene/p/4613035.html 阅读目录 一:动态SQL 二:SQL片段 三:foreach 回到顶部 一:动态SQL 1.1.定义 m ...

  3. <MyBatis>入门六 动态sql

    package org.maple.mapper; import org.apache.ibatis.annotations.Param; import org.maple.pojo.Employee ...

  4. 【mybatis深度历险系列】mybatis中的动态sql

    最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...

  5. mybatis 详解------动态SQL

    mybatis 详解------动态SQL   目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...

  6. mybatis中的动态SQL

    在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...

  7. Mybatis映射文件动态SQL语句-01

    因为在很多业务逻辑复杂的项目中,往往不是简单的sql语句就能查询出来自己想要的数据,所有mybatis引入了动态sql语句, UserMapper.xml <?xml version=" ...

  8. MyBatis实战之动态SQL

    如果使用JDBC或者其他框架,很多时候你得根据需要去拼接SQL,这是一个麻烦的事情,而MyBatis提供对SQL语句动态的组装能力,而且它只有几个基本的元素,非常简单明了,大量的判断都可以在MyBat ...

  9. 6.Mybatis中的动态Sql和Sql片段(Mybatis的一个核心)

    动态Sql是Mybatis的核心,就是对我们的sql语句进行灵活的操作,他可以通过表达式,对sql语句进行判断,然后对其进行灵活的拼接和组装.可以简单的说成Mybatis中可以动态去的判断需不需要某些 ...

  10. MyBatis注解配置动态SQL

    MySQL创建表 DROP TABLE IF EXISTS `tb_employee`; CREATE TABLE `tb_employee` ( `id` int(11) NOT NULL AUTO ...

随机推荐

  1. transactional replication 的immediate_sync属性

    在默认情况下,immediate_sync是关闭的,这个属性可以在创建publication时指定,也可以在创建完毕后修改. 如果immediate_sync为true, snapshot 文件和re ...

  2. 4.3.3版本之引擎bug

    bug描述: IOS设备上,当使用WWW www = WWW.LoadFromCacheOrDownload(url, verNum); 下载资源时,第一次下载某个资源,www.assetBundle ...

  3. typeof与GetType

    typeof: The typeof operator is used to obtain the System.Type object for a type. 运算符,获得某一类型的 System. ...

  4. Eclipse中使用Junit编写测试用例

    Eclipse自带Junit插件,不用安装就能在项目中编写测试用例,非常方便. 在项目中添加Junit库 在编写测试用例之前,需要先引入Junit.对项目根目录右键,选择Properties,Java ...

  5. 使用 IntelliJ IDEA 2016和Maven创建Java Web项目的详细步骤及相关问题解决办法

    Maven简介 相对于传统的项目,Maven 下管理和构建的项目真的非常好用和简单,所以这里也强调下,尽量使用此类工具进行项目构建, 它可以管理项目的整个生命周期. 可以通过其命令做所有相关的工作,其 ...

  6. canvas剪裁图片并上传,前端一步到位,无需用到后端

    背景: 当前主流的图片剪裁主要有两种实现方式. 1:flash操作剪裁.2:利用js和dom操作剪裁. 目前看来这个剪裁主要还是先通过前端上传图片到服务器,然后前端操作后把一些坐标和大小数据传到后台, ...

  7. 使用Html5+C#+微信 开发移动端游戏详细教程 总目录

    (一).序(关于作者创业失败的感想) (二).准备工作&开发环境 (三).使用html5引擎搭建游戏框架 (四).游戏中层的概念与设计 (五).游戏图像的加载与操作 (六).游戏界面布局与性能 ...

  8. SQL 关于apply的两种形式cross apply 和 outer apply

    SQL 关于apply的两种形式cross apply 和 outer apply 例子: CREATE TABLE [dbo].[Customers]( ) COLLATE Chinese_PRC_ ...

  9. python第三方模块精选

    python不但有着强大丰富的“内置电池”,同样的,第三方模块也是非常的多.目前收集了requests.paramiko.pymsql,以后会陆续添加: 一.requests Python标准库中提供 ...

  10. C#语法糖之 ReflectionSugar 通用反射类

    用法很简单: ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒 ,可以不填默认不缓存 rs.有嘛点嘛   性能测试: 性能测试类源码: ht ...