log4j.properties

# Global logging configuration
#\u5728\u5f00\u53d1\u9636\u6bb5\uff0c\u8bbe\u7f6e\u4e3aDEBUG\uff0c\u5230\u751f\u4ea7\u73af\u5883\u4e0a\u8bbe\u7f6einfo\u6216error\u5c31\u884c\u4e86\u3002
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

User.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> <!-- 和spring整合后 environments配置将废除 -->
<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="mysql" />
</dataSource>
</environment>
</environments> <!-- 加载mapper.xml -->
<mappers>
<!-- 指定classpath下的文件 -->
<mapper resource="sqlmap/User.xml"/>
</mappers> </configuration>
<?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映射文件是以sql语句为单位进行配置,最终将sql语句封装到MappedStatement对象中
namespace命名空间作用是更好对sql语句进行隔离,方便管理sql 注意:后期讲mybatis的mapper代理开发方式时namespace有特殊的作用???
-->
<mapper namespace="test"> <!-- 根据用户id查询一个用户信息
select:用于查询,主要配置sql语句、输入参数类型、输出结果类型
最终该 select 标签 中所配置的内容会封装到MappedStatement对象,可以将该 select称为是一个Statement
id:唯 一标识 namespace下的一个sql语句,将id称为Statement的id parameterType:指定输入参数的类型(简单类型、自定义pojo)
#{}:表示一个占位符号,占位符号可以防止sql注入
#{value}:value表示接收输入参数的值,如果接收的输入参数是简单类型,#{}里边可以写value或其它的名称
resultType:将sql查询结果集映射成java对象
将多个列的值映射到一个对象中,需要定义的pojo,resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
resultType 指定单条记录所映射的java对象 -->
<select id="findUserById" parameterType="int" resultType="cn.itcast.mybatis.po.User">
SELECT id,username,birthday,sex,address FROM USER WHERE id = #{id}
</select> <!--
根据用户名称模糊查询用户信息列表
resultType:不管结果集记录的数量有多少,resutType指定单条记录所映射的java对象
resultType映射规则是sql查询列名和pojo的属性名必须一致方可完成映射
${}:表示一个sql拼接符号,相当于字符串的拼接:
“SELECT * FROM USER WHERE username LIKE '%” + ${}表示的串 + “%'”
${}:如果接收输入参数是一个简单类型,${} 中只能写value ${}实现sql拼接是无法防止sql注入的。 -->
<select id="findUserByName" parameterType="java.lang.String" resultType="cn.itcast.mybatis.po.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select> <!-- 添加用户
需要输入参数是多个值,如果传入简单类型是无法满足要求。
输入参数类型可以定义为pojo(cn.itcast.mybatis.po.User包括多个属性)
#{}如何获取对象的值?
#{}是通过OGNL读取对象的值,OGNL的表达式方式:属性.属性.属性。。。。直到把对象中的属性值读取过来 过止
mysql数据库通过select LAST_INSERT_ID();获取自增主键的值,在insert语句执行之后去执行LAST_INSERT_ID()获取新记录的主键
-->
<insert id="insertUser" parameterType="cn.itcast.mybatis.po.User">
<!--
keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
order:selectkey中的sql语句在insert语句执行的前或后,这里要设置成"AFTER"
resultType:select LAST_INSERT_ID()查询出的值
-->
<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address});
</insert> <!-- 使用mysql的uuid生成主键 -->
<!-- <insert id="insertUser" parameterType="cn.itcast.mybatis.po.User"> keyProperty:将主键值设置到输入参数的哪个属性,设置到user的id属性中
order:select uuid()在insert执行之前去执行得到uuid作为主键,将主键值设置到user的属性中
resultType:select uuid()查询出的值 <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
select uuid()
</selectKey>
insert into user(id,username,birthday,sex,address) values(#{id},#{username},#{birthday},#{sex},#{address});
</insert> --> <!-- 修改用户-->
<update id="updateUser" parameterType="cn.itcast.mybatis.po.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id}
</update> <!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id = #{id}
</delete> </mapper>

测试类

public class MybatisFirst {

    // 根据用户id查询用户信息
@Test
public void testFindUserById() throws Exception { // mybatis全局配置文件
String resource = "SqlMapConfig.xml"; // 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream); // 创建SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); // 使用sqlSession查询用户
// 第一个参数:statement的id,前边要加namespace
// 第二个参数:输入的参数对象值
// selectOne用于返回单个对象,如果sql查询返回一个列表(多个对象),如果使用selectOne报错
User user = sqlSession.selectOne("test.findUserById", 1);
System.out.println(user); // 关闭sqlsession
sqlSession.close(); } // 根据用户名称模糊查询用户信息
@Test
public void testFindUserByName() throws Exception { // mybatis全局配置文件
String resource = "SqlMapConfig.xml"; // 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream); // 创建SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); // 根据用户名称模糊查询
// selectList用于 将sql查询结果映射成java对象 ,返回一个List<Object>
// 1参数:statement的id(等于namespace+statement的id)
// 2参数:输入参数值
List<User> list = sqlSession.selectList("test.findUserByName", "张"); System.out.println(list); // 关闭sqlsession
sqlSession.close(); } // 插入用户
@Test
public void testInsertUser() throws Exception { // mybatis全局配置文件
String resource = "SqlMapConfig.xml"; // 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream); // 创建SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); // 构造 输入参数,就是插入的用户信息
User user = new User();
user.setUsername("赵六");
user.setBirthday(new Date());
user.setAddress("北京");
// 调用sqlSession插入用户
sqlSession.insert("test.insertUser", user); System.out.println("新user的主键:" + user.getId()); // 提交
sqlSession.commit(); // 关闭sqlsession
sqlSession.close(); } // 更新用户
@Test
public void testUpdateUser() throws Exception { // mybatis全局配置文件
String resource = "SqlMapConfig.xml"; // 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream); // 创建SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); // 构造 输入参数,就是更新的用户信息
User user = new User();
// 更新的用户信息中必须要有id
user.setId(62);
user.setUsername("赵六3");
user.setBirthday(new Date());
user.setAddress("郑州");
// 调用sqlSession插入用户
sqlSession.update("test.updateUser", user); // 提交
sqlSession.commit(); // 关闭sqlsession
sqlSession.close(); } // 删除用户
@Test
public void testDeleteUser() throws Exception { // mybatis全局配置文件
String resource = "SqlMapConfig.xml"; // 根据mybatis的全局配置文件构造 一个流
InputStream inputStream = Resources.getResourceAsStream(resource); // 创建SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream); // 创建SqlSession会话 SqlSession sqlSession = sqlSessionFactory.openSession(); sqlSession.delete("test.deleteUser", 60);
// 提交
sqlSession.commit(); // 关闭sqlsession
sqlSession.close(); }
}
public class User {

    private int id;
private String username;// 用户姓名
private String sex;// 性别
private Date birthday;// 生日
private String address;// 地址
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", username=" + username + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
} }

user

Mabatis入门案例的更多相关文章

  1. Mybatis基础及入门案例

    这几天正在对SSM框架的知识进行一个回顾加深,有很多东西学的囫囵吞枣,所以利用一些时间进一步的学习.首先大概了解一下mybatis的使用,再通过一个案例来学习它. 什么是MyBatis Mybatis ...

  2. SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)

    SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...

  3. SpringMvc核心流程以及入门案例的搭建

    1.什么是SpringMvc Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring 框架提供了构建 Web 应用程序的全功能 M ...

  4. Struts2第一个入门案例

      一.如何获取Struts2,以及Struts2资源包的目录结构的了解    Struts的官方地址为http://struts.apache.org 在他的主页当中,我们可以通过左侧的Apache ...

  5. MyBatis入门案例、增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

  6. Hibernate入门案例及增删改查

    一.Hibernate入门案例剖析: ①创建实体类Student 并重写toString方法 public class Student { private Integer sid; private I ...

  7. Quartz应用实践入门案例二(基于java工程)

    在web应用程序中添加定时任务,Quartz的简单介绍可以参看博文<Quartz应用实践入门案例一(基于Web应用)> .其实一旦学会了如何应用开源框架就应该很容易将这中框架应用与自己的任 ...

  8. Quartz应用实践入门案例一(基于Web环境)

    Quartz是一个完全由java编写的开源作业调度框架,正是因为这个框架整合了许多额外的功能,所以在使用上就显得相当容易.只是需要简单的配置一下就能轻松的使用任务调度了.在Quartz中,真正执行的j ...

  9. MyBatis入门案例 增删改查

    一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...

随机推荐

  1. jquery ui dialog弹出窗 清空缓存Cache或强制刷新

    我用jquery ui 弹出一个购物车的对话,通过AJAX加载的数据.发现购物车被缓存,一直看到是旧数据.为了刷新购物车更新,我必须去加一个刷新按钮,点击后更新购物车页面.有没有一种方法来自动刷新加载 ...

  2. ASP.NET MVC4 新手入门教程特别篇之一----Code First Migrations更新数据库结构(数据迁移)修改Entity FrameWork 数据结构(不删除数据)

    背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的 ...

  3. sublime快捷键大全(转)

    文件 File 新建文件 Ctrl + N 打开文件 Ctrl + O 打开最近关闭的文件 Ctrl + Shift + T 保存 Ctrl + S 另存为… Ctrl + Shift + S 关闭文 ...

  4. ,SQL语句关键词以及实例

    1.select:功能:查找,语法:select 列名 from 表名(注:可以一次从一个表中查询多个列或者从多个表名中查询资料) 实例:select Name from Table1,返回Table ...

  5. MySQL的四种事务隔离级别【转】

    本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...

  6. hdu 1011 Starship Troopers 经典的树形DP ****

    Starship Troopers Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  7. 【原创】MapReduce程序如何在集群上执行

    首先了解下资源调度管理框架Yarn. Yarn的结构(如图): Resource Manager (rm)负责调度管理整个集群上的资源,而每一个计算节点上都会有一个Node Manager(nm)来负 ...

  8. CentOS 7运维管理笔记(1)----设置默认启动模式为GUI模式或命令行模式

    昨天在虚拟机中安装CentOS 7时选择了GNOME模式安装,开机默认进入GUI模式.网上搜找修改为默认命令行模式的方法,看到说修改 /etc/inittab文件,在最低下一行添加 但是 使用 cat ...

  9. JSP / JDK和Apache的配置

    系统环境:Windows7 x64 Ultimate chs 1.首先安装jdk,可以再oracle官网下载到,此处安装jdk6.0版本. 2.配置jdk环境变量: 我的电脑-->属性--> ...

  10. springmvc/springboot处理前台字符串日期自动转换成后台date类型的三种办法

    参考https://blog.csdn.net/eumenides_/article/details/79033505 补充一个:Formatter也可以实现.