之前一直有用Hibernate进行开发。近期公司在使用Mybatis。依据网上的演示样例,做了一个简单的Demo,以便日后复习

使用XMl方式映射sql语句

整体结构例如以下图

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2t1aV93aW5nZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2t1aV93aW5nZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

首先是创建一个project,然后导入两个jar包,然后编写mybatis的jdbc配置文件Configuration.xml

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>
<!-- 为sql映射文件里的类型指定别名,假设不加alias,则整个包下的别名都是类名 -->
<typeAliases>
<typeAlias type="com.demo.bean.User" alias="User"/>
</typeAliases> <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl" />
<property name="username" value="scott" />
<property name="password" value="scott" />
</dataSource>
</environment>
</environments> <mappers>
<mapper resource="com/demo/bean/User.xml" />
</mappers>
</configuration>

User类。文章中省略getter和setter方法

package com.demo.bean;

import java.util.Date;

public class User {
private String id;
private String name;
private String password;
private Date birthday;
private String address; }

然后是创建sql映射文件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.demo.bean.User">
<!-- 查询全部用户, resultType代表返回类型(一般写全限定类名。也能够在mybatis配置文件里指定别名),parameterType代表參数类型 -->
<select id="selectAllUsers" resultType="User">
select * from valid_user
</select> <!-- 依据id查询用户 -->
<select id="findUserById" parameterType="int" resultType="User">
select * from valid_user where id=#{id}
</select> <!-- 依据id更新用户 -->
<update id="updateUserById" parameterType="User">
update valid_user set name=#{name},address=#{address} where id=#{id}
</update> <!-- 加入新用户 -->
<insert id="addUser" parameterType="User">
insert into valid_user(id,name,password,address) values(seq_valid_user.nextval,#{name},#{password},#{address})
</insert> <!-- 依据id删除用户 -->
<delete id="deleteUserById" parameterType="int">
delete from valid_user where id=#{id}
</delete>
</mapper>

然后就是编辑測试类

package com.demo.Test;

import java.io.Reader;
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 com.demo.bean.User; public class TestConnection {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader; static {
try {
reader = Resources.getResourceAsReader("Configuration.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
} /**
* 查询全部User对象
* @param id
*/
public static void selectAllUsers() {
SqlSession session = sqlSessionFactory.openSession();
try {
List<User> listUsers = session.selectList("com.demo.bean.User.selectAllUsers");
for (User user:listUsers) {
System.out.println("ID:" + user.getId() + ",姓名:" + user.getName() + ",password:" + user.getPassword() + ",住址:" + user.getAddress());
}
} finally {
session.close();
}
} /**
* 依据id查询User对象
* @param id
*/
public static void findUserById(String id) {
SqlSession session = sqlSessionFactory.openSession();
try {
User user = (User) session.selectOne("com.demo.bean.User.findUserById", id);
System.out.println("ID:" + user.getId() + ",姓名:" + user.getName() + ",password:" + user.getPassword() + ",住址:" + user.getAddress());
} finally {
session.close();
}
} /**
* 依据id更新User对象
* @param id
*/
public static void updateUserById(String id,User user) {
SqlSession session = sqlSessionFactory.openSession();
try {
session.update("com.demo.bean.User.updateUserById",user);
session.commit();
} finally {
session.close();
}
} /**
* 加入一条User对象
*/
public static void addUser(User user) {
SqlSession session = sqlSessionFactory.openSession();
try {
session.insert("com.demo.bean.User.addUser",user);
session.commit();
} finally {
session.close();
}
} /**
* 删除一条User对象
*/
public static void deleteUserById(String id) {
SqlSession session = sqlSessionFactory.openSession();
try {
session.delete("com.demo.bean.User.deleteUserById",id);
session.commit();
} finally {
session.close();
}
} public static void main(String[] args) { selectAllUsers(); // findUserById("1"); // 依据id查询User对象 // User user=new User();
// user.setId("2");
// user.setName("Zams");
// user.setAddress("河南、郑州");
// updateUserById("2",user); // 依据id更新User对象 // User add_user=new User();
// add_user.setName("古力娜扎");
// add_user.setPassword("3412312");
// add_user.setAddress("河南、郑州、开封");
// addUser(add_user); // 依据id更新User对象 // deleteUserById("4");
}
}

执行效果例如以下;

ID:1,姓名:X-rapido,password:rapido,住址:北京朝阳、海淀
ID:2,姓名:Zams,password:gril,住址:河南、郑州
ID:3,姓名:盖尔加朵,password:3412312,住址:河南、郑州
ID:5,姓名:古力娜扎,password:3412312,住址:河南、郑州、开封

其它内容:

  1. SqlSession session = sqlSessionFactory.openSession();   能够设置事务的自己主动提交。
  2. 配置文件里的jdbc联接能够写在properties文件里。
  3. Mybatis的sql映射能够使用xml的形式,如上面内容,也能够使用java注解方式。
  4. 映射文件里能够配置多表连接方式。參考其它文档,未做演示样例
  5. 另外mybatis能够配置动态sql语句形式、调用存储过程、为sql语句字段指定别名(一般数据库字段与java类字段不同一时候须要指定)
  6. Mybatis的sql打印并不像Hibernate那样有设置sql打印的參数。它须要与log4j.jar包进行配合才干打印

使用Java注解方式映射sql语句

使用注解方式的演示样例结构例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGlhb2t1aV93aW5nZmx5/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

整体结构内容不变,主要改动java注解配置类(Service类)、配置文件、測试类3个地方就可以

UserMapper类

package com.demo.bean;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; /**
* 使用注解映射,不须要写实现类,但要在Mybatis配置文件里将此类进行注冊
*/
public interface UserMapper { @Select("select * from valid_user")
List<User> selectAllUsers(); @Select("select * from valid_user where id=#{id}")
User findUserById(String id); @Update("update valid_user set name=#{name},address=#{address} where id=#{id}")
int updateUserById(User user); @Insert("insert into valid_user(id,name,password,address) values(seq_valid_user.nextval,#{name},#{password},#{address})")
int addUser(User user); @Delete("delete from valid_user where id=#{id}")
int deleteUserById(String id);
}

Mybatis配置文件里 configuration.xml改动 mapper内容

	<mappers>
<mapper class="com.demo.bean.UserMapper" />
</mappers>

将測试类中的如查询全部代码的com.demo.bean.User.selectAllUsers改动为com.demo.bean.UserMapper.selectAllUsers就可以。

測试效果同xml的配置效果一样。

在实际应用中。有时候须要对Mybatis进行多參数传值,这时候能够使用Map对象进行查询

比方在登录时。传入账户名和password,在xml在将 parameterType设置为map參数类型, parameterType="map"

Map<String, String> map = new HashMap<String, String>();
map.put("name", userName);
map.put("password", password);
return sqlSession.selectOne("com.demo.bean.User.loginUser", map);

设置log4j,打印SQL运行语句

log4j的配置文件能够是xml形式,也能够是.properties文件形式

log4j.properties(方式一)

log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p %d{MM-dd HH:mm:ss,SSS} %m (%F:%L) \n" />
</layout>
</appender>
<logger name="java.sql">
<level value="debug" />
</logger>
<logger name="org.apache.ibatis">
<level value="debug" />
</logger>
<root>
<level value="debug" />
<appender-ref ref="STDOUT" />
</root>
</log4j:configuration>

MyBatis对数据库的增删改查操作,简单演示样例的更多相关文章

  1. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  2. python web.py操作mysql数据库,实现对数据库的增删改查操作

    使用web.py框架,实现对mysql数据库的增删改查操作: 该示例代码中连接的是本地数据库testdb,user表,表结构比较简单,只有两个字段:mobile和passwd,类型均为字符型 实际应用 ...

  3. TP5.1:数据库的增删改查操作(基于面向对象操作)

    我们现实中对数据库的增删改查操作,都是使用模型类进行操作的(表名::),也就是面向对象操作,只有底层的代码用的是数据库操作(Db::table('表名')) 下面我将贴出模型类进行的增删改查操作,通过 ...

  4. 通过jdbc连接MySql数据库的增删改查操作

    一.获取数据库连接 要对MySql数据库内的数据进行增删改查等操作,首先要获取数据库连接 JDBC:Java中连接数据库方式 具体操作如下: 获取数据库连接的步骤: 1.先定义好四个参数 String ...

  5. TP5.1:数据库的增删改查操作(基于数据库操作)

    1.在app/index/controller文件夹下创建一个文件,名为:Operation 注意:起名一定要避开关键字,例如:mysql,curd等等,如果使用关键字起名,会造成报错! 在Opera ...

  6. java程序设计课期中考试——数据库的增删改查和简单的js界面

    首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他 ...

  7. greendao对SQLite数据库的增删改查操作

    利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...

  8. Django中ORM对数据库的增删改查操作

         前言 什么是ORM?  ORM(对象关系映射)指用面向对象的方法处理数据库中的创建表以及数据的增删改查等操作. 简而言之,就是将数据库的一张表当作一个类,数据库中的每一条记录当作一个对象.在 ...

  9. nodejs对mongodb数据库的增删改查操作(转载)

    首先要确保mongodb的正确安装,安装参照:http://docs.mongodb.org/manual/tutorial/install-mongodb-on-debian-or-ubuntu-l ...

随机推荐

  1. mybatis or

    这两天项目用到mybatis,碰到and or的联合查询,语句像这样的 select * from table where xxx = "xxx" and (xx1="x ...

  2. Educational Codeforces Round 42 (Rated for Div. 2)

    A. Equator(模拟) 找权值的中位数,直接模拟.. 代码写的好丑qwq.. #include<cstdio> #include<cstring> #include< ...

  3. P1418 选点问题

    题目描述 给出n个点,m条边,每个点能控制与其相连的所有的边,要求选出一些点,使得这些点能控制所有的边,并且点数最少.同时,任意一条边不能被两个点控制 输入输出格式 输入格式: 第一行给出两个正整数n ...

  4. Android传递中文参数方法(之一)

    最近在做app,用的volley传参,有一个地方传中文参数不行(貌似是get方式),我又试了下post方式,成功了,记录下,以后有用! RequestQueue requestQueue = Voll ...

  5. android Activity实现底部滑动弹出窗口及源码下载地址

    在做微信.微博.qq等分享时,一般是点击分享按钮后会从底部弹出滑动窗口,然后选择要分享的社交平台进行分享.今日头条.腾讯新闻等内容App的评论也是从底部滑动弹出输入窗口,进行评论输入的.本篇文章就讲讲 ...

  6. CSS——宠物demo

    注意:ul中自带padding值,需要清除. <!DOCTYPE html> <html lang="en"> <head> <meta ...

  7. MyBatis入门2_增删改查+数据库字段和实体字段不一致情况

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! 当数据库字段和实体bean中属性不一致时 之前数据库P ...

  8. struts2_validate表单验证

    使用代码实现 验证功能 (也就是重写ActionSupport中的validate()方法) 在validate方法中进行编写我们需要的验证功能 这里需要提几点的就是: 1.当我们需要对action中 ...

  9. C# textbox 获得焦点

    this.ActiveControl = txt_core;

  10. Java切换JDK版本的方法及技巧

    由于项目的不同安排,之前项目开发时,使用的jdk版本为1.8,现临时接手一以前项目,需要更换jdk版本. 安装 不再赘述,去Oracle网站(https://www.oracle.com/techne ...