(一)搭建Mybatis环境

(1)先导入常用的jar包:并且需要将lib文件夹下的包导入到项目中

(2)创建config文件夹,配置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

(3)配置数据库连接文件db.properties

jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:cmskf
jdbc.username=cmskf
jdbc.password=cmskf

(4)配置Mybatis的核心配制文件SqlMapConfig.xml:先暂时配置事务管理器和数据库连接,并加载配制文件:比如db.properties和映射文件mapper.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"/>
<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>
<mapper resource="User.xml"/>
</mappers> </configuration>

注意:此核心配制文件中标签有一定的顺序呢,在标签<environment></environments>中需要先加载事务管理器,在连接数据库。

(5)配制pojo对象类:User.java

package com.dbzhand.pojo;

import java.util.Date;

public class User {
private int id;
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", sex=" + sex
+ ", birthday=" + birthday + ", address=" + address + "]";
}
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
private String sex;
private Date birthday;
private String address; }

(6)配制映射文件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="test">
<!-- 根据用户ID查询用户信息 ,注意返回类型在没有定义别名的时候,使用包.类-->
<!-- id :sql语句唯一标识符, parameterType是传入参数类型,resultType是返回结果集的类型,
#{}占位符,起到占位符的作用,当传入的参数类型是基本数据类型的时候,占位符中的变量名可以顺便写
-->
<!-- <select id="findUserByID" parameterType="int" resultType="com.dbzhand.pojo.User">
select * from user1 where id=#{id}
</select> -->
<!--(1) 如果输出结果为集合,则可以使用selectList方法
(2)若果输入的参数为基本类型,在${}中的值必须为value
(3)${}为拼接符,有sql注入的风险
-->
<!-- <select id="findUserByName" parameterType="String" resultType="com.dbzhand.pojo.User">
select * from user1 where name like '%${value}%'
</select> --> <!--
#{}占位符,如果传入的是占位符,那么#{}中的变量名必须是pojo中对应的属性,属性。。。。。
如果要返回数据库自增的主键,可以使用SELECT LAST_INSERT_ID()
-->
<insert id="insertUser" parameterType="com.dbzhand.pojo.User">
<!--
执行SELECT LAST_INSERT_ID()数据库函数,返回自增的主键,注意这个函数是MySql数据库的函数,oracle中不能使用
keyProperty:将返回的主键放入传入参数ID中保存。
order:当前函数相对于insert语句的执行顺序,在insertt前执行before,在insert之后执行AFTER
resultType:id的类型,也就是keyproperties中属性的类型
-->
<!-- <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
select LAST_INSERT_ID()
</selectKey> -->
insert into user1 (name,birthday,sex,address) values(#{name},#{birthday},#{sex},#{address})
</insert> <!-- <delete id="delUserById" parameterType="int">
delete from user where id=#{id}
</delete> <update id="updateUserById" parameterType="cn.itheima.pojo.User">
update user set username=#{username} where id=#{id}
</update> --> <delete id="delUserById" parameterType="int">
delete from user1 where id=#{id}
</delete>
<!-- 更新时,传入参数为pojo,而不是id -->
<update id="updateUserById" parameterType="com.dbzhand.pojo.User">
update user1 set name=#{name} where id=#{id}
</update> </mapper>

(7)测试类UserTest.java

package com.dbzhang.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List; import oracle.net.ns.SessionAtts; 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.Test; import com.dbzhand.pojo.User;
/**
* 关于该类中需要注意的事项:
* (1)操作数据库的方法中参数:namespace.id
* (2)关于更新时传参应为:pojo对象
* (3)Mybatis中默认不会自动提交事务,因此最好手工提交
* @author Administrator
*
*/
public class UserTest {
/*@Test
public void findUserByID() throws IOException {
String resource = "SqlMapConfig.xml";
// 1.通过流加载配置文件
InputStream inputStream = Resources.getResourceAsStream(resource);
System.out.println("\n\n\n"+inputStream);
// 2.通过核心配置文件输出流创建回话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder()
.build(inputStream);
// 3.通过 会化工厂创建回话
SqlSession sqlSession = sqlSessionFactory.openSession();
// 4.开始执行映射文件中国的select
//此处写法的注意:namespace.id
User user = (User) sqlSession.selectOne("test.findUserByID", 1);
System.out.println("\n\n输出:" + user);
sqlSession.close(); }*/
/*@Test
public void findUserByName() throws IOException{
String resource = "SqlMapConfig.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
//此处写法的注意:namespace.id
List<User> list = session.selectList("test.findUserByName", "A");
System.out.println("\n\nlist集合="+list);
session.close(); }*/ /*@Test
public void testInsertUser() throws Exception{
String resource = "SqlMapConfig.xml";
//通过流将核心配置文件读取进来
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过核心配置文件输入流来创建会话工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂创建会话
SqlSession openSession = factory.openSession(); User user = new User();
user.setUsername("赵四");
user.setBirthday(new Date());
user.setSex("1");
user.setAddress("北京昌平");
System.out.println("====" + user.getId());
//此处写法的注意:namespace.id
openSession.insert("test.insertUser", user);
//提交事务(mybatis会自动开启事务,但是它不知道何时提交,所以需要手动提交事务)
openSession.commit(); System.out.println("====" + user.getId());
}*/ /*插入pojo对象,手动提交事务,针对oracel中,暂时没有实现主键自增,所以插入数据时没有id暂时为空*/
/*@Test
public void testInsertUser() throws IOException{
String resource = "SqlMapConfig.xml";
//通过流将核心配置文件读取出来
InputStream inputStream = Resources.getResourceAsStream(resource);
//通过核心配置文件输入流来创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//创建会话
SqlSession sqlSessions = sqlSessionFactory.openSession(); //创建pojo对象User
User user = new User();
user.setName("张三丰");
user.setBirthday(new Date());
user.setAddress("北京昌平");
user.setSex("男");
System.out.println("id1======"+user.getId()); sqlSessions.insert("test.insertUser", user);
//提交事务(mybatis会自动提交事务,但不知道何时提交,所以需要手动提交事务)
sqlSessions.commit();
System.out.println("id2======"+user.getId()); }*/ /*执行删除操作,手动提价事务**/
/*@Test
public void delUserById() throws IOException{
String resource = "SqlMapConfig.xml";
//1.通过流将核心配置文件读取出来
InputStream inputStream = Resources.getResourceAsStream(resource);
//2.通过核心输入流创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3.打开会话
SqlSession sqlSession = sqlSessionFactory.openSession();
sqlSession.delete("test.delUserById", 1);
//提交事务(mybatis不会自动提交事务,因此需要手动提交)
sqlSession.commit(); }*/ /*是更新操作,根据Id去更新name,需要传入pojo对象**/
/*@Test
public void updateUserById() throws IOException{
String resource = "SqlMapConfig.xml";
//1.通过流读取配制文件
InputStream inputStream = Resources.getResourceAsStream(resource);
//2.通过核心配制文件输入流创建会话工厂
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//3.打开会话
SqlSession sqlSession = sqlSessionFactory.openSession(); User user = new User();
user.setId(1);
user.setName("李小龙");
sqlSession.update("test.updateUserById", user);
//4.提交事务
sqlSession.commit();
//5.关闭会话
sqlSession.close(); }
*/ }

初步完成!!!

(二)总结:

(1)区别占位符#{}和拼接符${}的区别:

#{}表示一个占位符号,通过#{}可以实现preparedStatement向占位符中设置值,自动进行java类型和jdbc类型转换,#{}可以有效防止sql注入。 #{}可以接收简单类型值或pojo属性值。 如果parameterType传输单个简单类型值,#{}括号中可以是value或其它名称。

${}表示拼接sql串,通过${}可以将parameterType 传入的内容拼接在sql中且不进行jdbc类型转换, ${}可以接收简单类型值或pojo属性值,如果parameterType传输单个简单类型值,${}括号中只能是value。

(2)关于parameterType和resultType的区别

parameterType时传入参数的类型,mybatis根据ognl从输入对象中获取参数值并拼接在sql中;

resultType指定输出类型,mybatis将sql查询结果的一行记录数据映射为resultType指定类型的对象。

(3)关于selectOne和selectList的区别:

selectOne是查询一条记录;selectList是查询一条或多条记录。

关于使用Mybatis的使用说明(一)【未完善待更新】的更多相关文章

  1. Mybatis使用注解开发(未完)

    使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心 注解在接口实现 @Select("SELECT * FROM user") Lis ...

  2. C#中的数据格式转换 (未完待更新)

    一.string to int int intA = 0;1.intA =int.Parse(str);2.int.TryParse(str, out intA);3.intA = Convert.T ...

  3. liunx下安装mysql(未完待更新)

    1.下载mysql-liunx 下载地址:http://download.csdn.net/download/yichen01010/10019139 2.删除系统自带mysql rpm -qa|gr ...

  4. (阿里巴巴)数据库连接池——Druid (未完持续更新)

    Java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,有不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色的性能,也 ...

  5. git指令-未完待更新

    git指令 1. $ git config --global user.name "Your Name" $ git config --global user.email &quo ...

  6. Hibernate二级缓存(未完待续)

    1.Hibernate的cache介绍: Hibernate实现了良好的Cache机制,可以借助Hibernate内部的Cache迅速提高系统的数据读取性能.Hibernate中的Cache可分为两层 ...

  7. javascript有用小功能总结(未完待续)

    1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...

  8. ASP.NET MVC 系列随笔汇总[未完待续……]

    ASP.NET MVC 系列随笔汇总[未完待续……] 为了方便大家浏览所以整理一下,有的系列篇幅中不是很全面以后会慢慢的补全的. 学前篇之: ASP.NET MVC学前篇之扩展方法.链式编程 ASP. ...

  9. 关于DOM的一些总结(未完待续......)

    DOM 实例1:购物车实例(数量,小计和总计的变化) 这里主要是如何获取页面元素的节点: document.getElementById("...") cocument.query ...

随机推荐

  1. 关于swiper的滚动条滑动

    <div class="swiper-container2"> <div class="swiper-wrapper"> <div ...

  2. 外网如何访问 Service?- 每天5分钟玩转 Docker 容器技术(139)

    除了 Cluster 内部可以访问 Service,很多情况我们也希望应用的 Service 能够暴露给 Cluster 外部.Kubernetes 提供了多种类型的 Service,默认是 Clus ...

  3. xshell无法登录阿里云服务器

    1. 现象 a. 使用xshell无法登录服务器 b. 查看sshd服务 c. 不同公网ip的电脑正常登陆 2. 解决方案 a. 不同公网ip可以登录,断定是ip被黑名单,联系阿里云服务,把公网ip加 ...

  4. [BZOJ1009] [HNOI2008] GT考试 (KMP & dp & 矩阵乘法)

    Description 阿申准备报名参加GT考试,准考证号为N位数X1X2....Xn(0<=Xi<=9),他不希望准考证号上出现不吉利的数字. 他的不吉利数学A1A2...Am(0< ...

  5. 细说css中的position属性

    有过css开发经验的同学,对于position这个属性一定不会陌生,然而这个熟悉的属性确是面试题中的常客,也就说明了该属性在css的世界是有一定的江湖地位的,那么我们就来详细的说说position这个 ...

  6. anaconda的fish shell支持

    最近在用fish shell,但是无法使用conda的activate命令来激活环境.官方给的有解决方案 https://github.com/conda/conda/blob/5b97a96d78e ...

  7. 关系型数据库工作原理-查询优化器(翻译自Coding-Geek文章)

    本文翻译自Coding-Geek文章:< How does a relational database work>.原文链接:http://coding-geek.com/how-data ...

  8. A Proof of Stake Design Philosophy - PoS权益证明设计理念

    之前在EthFans上看到了关于PoS(权益证明)的相关文章(原文链接),本着学习的态度,对这篇文章进行了翻译.第一次翻译关于区块链的文章,有些单词及句子的措辞还不是很准确,如果发现有翻译的不恰当的地 ...

  9. JavaScript编码规范(1)

    参考的是百度公司的JS规范,分为两部分.这是第一部分 [建议] JavaScript 文件使用无 BOM 的 UTF-8 编码. 空格 [强制] 二元运算符两侧必须有一个空格,一元运算符与操作对象之间 ...

  10. XeLaTeX中文模板

    XeLaTeX对中文的支持很友好,可以直接调用系统已安装字体进行文档的撰写.其中需要引用字体的名字,开始遇到了写问题,经常发现字体未引用,现在大概明白了. 引用字体的时候,如果不加中括号,就需要引用字 ...