(一)搭建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. Java常量定义

    Java常量定义 /** * char 类型常量 */ private static final char CHAR = 'A'; /** * byte 类型常量 */ private static ...

  2. 指针数组与带参main函数

    (一)指针数组 指针数组就是每一个元素存放一个地址,相当于一个指针变量.如:int *p[4]指针数组比较适合用来指向若干字符串,使得处理字符串更加灵活.例如,现在要将若干字符串按字母顺序由小到大输出 ...

  3. 在.NET Core中处理一个接口多个不同实现的依赖注入问题

    前言 近段时间在准备公司的技术分享,所以这段时间将大部分时间放在准备分享内容上去了.博客也就停了一下下. 在.NET Core中处理依赖注入问题时,往往是定义好了一个操作规范的接口,会有N多个基于不同 ...

  4. 平面图转对偶图(Bzoj1001:狼抓兔子)

    如果只会用最小割做这道题那就太菜辣 引入 来自某学长 平面图:在平面上边不相交的图(边可以绕着画) 那么平面图的边与边就围成了许多个区域(这与你画图的方式有关) 定义对偶图:把相邻的两个区域连上边,形 ...

  5. java中获取所有的请求参数

    //获取所有的请求参数 Enumeration<String> paraNames=request.getParameterNames(); for(Enumeration<Stri ...

  6. JavaScript之BOM

    一.什么是BOM? BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”. 二.Windows对象 Window对象是客户端Ja ...

  7. Java 计算年龄

    public static String getAgeTxt(String birthTime,String beginTime,int level){ if(StringUtils.isBlank( ...

  8. python条件控制

    条件控制 现在我们写这样一个程序:在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了 my_age = 24 user_in ...

  9. ASP.NET Core 一步步搭建个人网站(7)_Linux系统移植

    摘要 考虑我们为什么要选择.NET Core? 因为它面向的是高性能服务器开发,抛却了 AspNet 的臃肿组件,非常轻量,加上微软的跨平台战略,对 Docker 的亲和性,对于开发人员也非常友好,所 ...

  10. 基于python自动化测试平台与虚拟化技术结合的思考

    背景: 自动化测试行业内,个人觉得主力语言是python.java.这里讨论下基于python自动化框架设计与case开发,用过python的都知道它的好处,但是根据实际项目需要有了很多迎面而来的困难 ...