<?xml version="1.0" encoding="UTF-8" ?> 2 3 <!DOCTYPE sqlMapConfig 4 5 PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> 6 <!-- Always ensure to use the correct XML header as above! --> 7 8 <sqlMapConfig> 9 10 <!-- The properties (name=value) in the file specified here can be used placeholders in this config file (e.g. “${driver}”. The file is relative to the classpath and is completely optional. -->11 <properties resource=" examples/sqlmap/maps/SqlMapConfigExample.properties " />12 13 14 <!-- These settings control SqlMapClient configuration details, primarily to do with transaction management. They are all optional (more detail later in this document). -->15 <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="true" maxRequests="32" maxSessions="10" maxTransactions="5"16 useStatementNamespaces="false"17 18 />19 20 <!-- Type aliases allow you to use a shorter name for long fully qualified class names. -->21 22 <typeAlias alias="order" type="testdomain.Order"/>23 24 25 <!-- Configure a datasource to use with this SQL Map using SimpleDataSource. Notice the use of the properties from the above resource -->26 <transactionManager type="JDBC" >27 28 <dataSource type="SIMPLE">29 30 <property name="JDBC.Driver" value="${driver}"/>31 32 <property name="JDBC.ConnectionURL" value="${url}"/>33 34 <property name="JDBC.Username" value="${username}"/>35 36 <property name="JDBC.Password" value="${password}"/>37 38 <property name="JDBC.DefaultAutoCommit" value="true" />39 40 <property name="Pool.MaximumActiveConnections" value="10"/>41 42 43 44 <property name="Pool.MaximumIdleConnections" value="5"/>45 46 <property name="Pool.MaximumCheckoutTime" value="120000"/>47 48 <property name="Pool.TimeToWait" value="500"/>49 50 <property name="Pool.PingQuery" value="select 1 from ACCOUNT"/>51 52 <property name="Pool.PingEnabled" value="false"/>53 54 <property name="Pool.PingConnectionsOlderThan" value="1"/>55 56 <property name="Pool.PingConnectionsNotUsedFor" value="1"/>57 58 </dataSource>59 60 </transactionManager>61 62 63 <!-- Identify all SQL Map XML files to be loaded by this SQL map. Notice the paths are relative to the classpath. For now, we only have one… -->64 <sqlMap resource="examples/sqlmap/maps/Person.xml" />65 66 </sqlMapConfig>
SQL Map 配置文件的各组成部分。
SQL Map 配置文件拥有唯一的<properties>元素,用于在配置文件中使用标准的 Java 属 性文件(name=value)。这样做后,在属性文件中定义的属性可以作为变量在 SQL Map 配 置文件及其包含的所有 SQL Map 映射文件中引用。例如,如果属性文件中包含属性:
driver=org.hsqldb.jdbcDriver
SQL Map 配置文件 及其每个 映射文件 都可以使 用占位符 ${driver} 来代 表值。
org.hsqldb.jdbcDriver。例如:
1 <property name="JDBC.Driver" value="${driver}"/>
这个元素在开发,测试和部署各阶段都很有用。它可以使在多个不同的环境中重新配置 应用和使用自动生成工具(如 ANT)变得容易。属性文件可以从类路径中加载(使用 resource 熟悉),也可以从合法的 URL 中加载(使用 url 属性)。例如,要加载固定路径的属性文件, 使用:
1 <properties url=”file:///c:/config/my.properties” />
<setting>元素: <setting>元素用于配置和优化 SqlMapClient 实例的各选项。<setting>元素本身及其所有 的属性都是可选的。下表列出了<setting>元素支持的属性及其功能:
maxRequests | 同时执行 SQL 语句的最大线程数。大于这个值的线程将阻塞直到另一个线程执行完成。不同的 DBMS 有不同的限制值,但任何数据库都有这些限制。通 常这个值应该至少是 maxTransactions(参见以下) 的 10 倍,并且总 是大于 maxSessions 和 maxTranactions。减小这个参数值通常能提高性能。 例如:maxRequests=“256” 缺省值:512 |
maxSessions | 同一时间内活动的最大 session 数。一个 session 可以 是代码请求的显式 session,也可以是当线程使用 SqlMapClient 实例(即执行一条语句)自动获得的 session。它应该总是大于或等于 maxTransactions 并 小于 maxRequests。减小这个参数值通常能减少内存 使用。 例如:maxSessions=“64” 缺省值:128 |
maxTransactions | 同时进入 SqlMapClient.startTransaction()的最大线程 数。大于这个值的线程将阻塞直到另一个线程退出。 不同的 DBMS 有不同的限制值,但任何数据库都有 这些限制。这个参数值应该总是小于或等于 maxSessions 并总是远远小于 maxRequests。减小这 个参数值通常能提高性能。 例如:maxTransactions=“16” 缺省值:32 |
cacheModelsEnabled | 全局性 地启 用或禁用 SqlMapClient 的所有 缓存 model。调试程序时使用。 例如:cacheModelsEnabled=“true” 缺省值:true(启用) |
lazyLoadingEnabled | 全局性地启用或禁用SqlMapClient的所有延迟加载。 调试程序时使用。 例子:lazyLoadingEnabled=“true” 缺省值:true(启用) |
enhancementEnabled | 全局性地启用或禁用运行时字节码增强,以优化访 问 Java Bean 属性的性能,同时优化延迟加载的性能。 例子:enhancementEnabled=“true” 缺省值:false(禁用) |
useStatementNamespaces | 如果启用本属性,必须使用全限定名来引用 mapped statement。Mapped statement 的全限定名由 sql-map 的名称和 mapped-statement 的名称合成。例如: queryForObject(“sqlMapName.statementName”); 例如:useStatementNamespaces=“false” 缺省值:false(禁用) |
<typeAlias>元素
<typeAlias>元素让您为一个通常较长的、全限定类名指定一个较短的别名。例如:
<typeAlias alias="shortname" type="com.long.class.path.Class"/>
在 SQL Map 配置文件预定义了几个别名。它们是:
事务管理器别名 | |
JDBC JTA EXTERNAL | com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig |
Data Source Factory 别名 | |
SIMPLE DBCP JNDI | com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory |
1.0 转换注意事项:SQL Map 1.0 允许配置多个数据源。这引起了一些不好的实践。因此,
2.0 版本只允许一个数据源。要使用多个部署/配置参数,您最好使用多个属性文件,不同的 系统使用不同的属性文件,或在创建 SQL Map 时传入不同的属性文件。
<transationManager>元素让您为 SQL Map 配置事务管理服务。属性 type 指定所使用的 事务管理器类型。这个属性值可以是一个类名,也可以是一个别名。包含在框架的三个事务 管理器分别是:JDBC,JTA 和 EXTERNAL。
¤ JDBC:通过常用的 Connection commit()和 rollback()方法,让 JDBC 管理事务。
¤ JTA:本事务管理器使用一个 JTA 全局事务,使 SQL Map 的事务包括在更大的事 务范围内,这个更大的事务范围可能包括了其他的数据库和事务资源。这个配置需 要一个 UserTransaction 属性,以便从 JNDI 获得一个 UserTransaction。
¤ EXTERNAL:这个配置可以让您自己管理事务。您仍然可以配置一个数据源,但 事务不再作为框架生命周期的一部分被提交或回退。这意味着 SQL Map 外部应用 的一部分必须自己管理事务。这个配置也可以用于没有事务管理的数据库(例如只读数据库)。
<datasource>是<transactionManager>的一部分,为 SQL Map 数据源设置了一系列参数。 目前 SQL Map 架构只提供三个 DataSource Factory,但您也可以添加自己的实现。下面详细 地讨论 DataSourceFactory 的三个实现及其例子。
SimpleDataSourceFactory
SimpleDataSourceFactory 为 DataSource 提供了一个基本的实现,适用于在没有 J2EE 容 器提供 DataSource 的情况。它基于 iBatis 的 SimpleDataSource 连接池实现。
1 <transactionManager type="JDBC"> 2 <dataSource type="SIMPLE"> 3 <property name="JDBC.Driver" value="org.postgresql.Driver"/> 4 <property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/> 5 <property name="JDBC.Username" value="user"/> 6 <property name="JDBC.Password" value="password"/> 7 <!-- OPTIONAL PROPERTIES BELOW --> 8 <property name="Pool.MaximumActiveConnections" value="10"/> 9 <property name="Pool.MaximumIdleConnections" value="5"/>10 <property name="Pool.MaximumCheckoutTime" value="120000"/>11 <property name="Pool.TimeToWait" value="10000"/>12 <property name="Pool.PingQuery" value="select * from dual"/>13 <property name="Pool.PingEnabled" value="false"/>14 <property name="Pool.PingConnectionsOlderThan" value="0"/>15 <property name="Pool.PingConnectionsNotUsedFor" value="0"/>16 </dataSource>17 </transactionManager>
DbcpDataSourceFactory
DbcpDataSourceFactory 实现使用 Jakarta DBCP(Database Connection Pool)的 DataSource API 提供连接池服务。适用于应用/Web 容器不提供 DataSource 服务的情况,或执行一个单 独的应用。DbcpDataSourceFactory 中必须要配置的参数例子如下:
1 <transactionManager type="JDBC"> 2 <dataSource type="DBCP"> 3 <property name="JDBC.Driver" value="${driver}"/> 4 <property name="JDBC.ConnectionURL" value="${url}"/> 5 <property name="JDBC.Username" value="${username}"/> 6 <property name="JDBC.Password" value="${password}"/> 7 <!-- OPTIONAL PROPERTIES BELOW --> 8 <property name="Pool.MaximumActiveConnections" value="10"/> 9 <property name="Pool.MaximumIdleConnections" value="5"/>10 <property name="Pool.MaximumWait" value="60000"/>11 <!-- Use of the validation query can be problematic. If you have difficulty, try without it. -->12 <property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>13 <property name="Pool.LogAbandoned" value="false"/>14 <property name="Pool.RemoveAbandoned" value="false"/>15 <property name="Pool.RemoveAbandonedTimeout" value="50000"/>16 </datasource>17 </transactionManager>
JndiDataSourceFactory
JndiDataSourceFactory 在应用容器内部从 JNDI Context 中查找 DataSource 实现。当使用 应用服务器,并且服务器提供了容器管理的连接池和相关 DataSource 实现的情况下,可以 使用 JndiDataSourceFactory。使用 JDBC DataSource 的标准方法是通过 JNDI 来查找。 JndiDataSourceFactory 必须要配置的属性如下:
1 <transactionManager type="JDBC" >2 <dataSource type="JNDI">3 <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>4 </dataSource>5 </transactionManager>
以上配置使用了常用的 JDBC 事务管理。但对于容器管理的资源,您可能需要象下面的 例子一样配置,让它能和全局事务一起工作:
1 <transactionManager type="JTA" >2 <property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>3 <dataSource type="JNDI">4 <property name="DataSource" value="java:comp/env/jdbc/jpetstore"/>5 </dataSource>6 </transactionManager>
注意,UserTransaction 属性指向 UserTransaction 实例所在的 JNDI 位置。JTA 事务管理 需要它,以使 SQL Map 能够参与涉及其他数据库和事务资源的范围更大的事务。
<sqlMap>元素
<sqlMap> 元素用于包括 SQL Map 映射文件和其他的 SQL Map 配置文件。每个 SqlMapClient 对象使用的所有 SQL Map 映射文件都要在此声明。映射文件作为 stream resource 从类路径或 URL 读入。您必须在这里指定所有的 SQL Map 文件。例子如下:
1 <!-- CLASSPATH RESOURCES -->2 <sqlMap resource="com/ibatis/examples/sql/Customer.xml" />3 <sqlMap resource="com/ibatis/examples/sql/Account.xml" />4 <sqlMap resource="com/ibatis/examples/sql/Product.xml" />5 <!-- URL RESOURCES -->6 <sqlMap url="file:///c:/config/Customer.xml " />7 <sqlMap url="file:///c:/config/Account.xml " />8 <sqlMap url="file:///c:/config/Product.xml" />
后面将总结SQL Map XML 映射文件的结构。
Ibatis学习总结2--SQL Map XML 配置文件
标签:
小编还为您整理了以下内容,可能对您也有帮助:
Mybatis Ibatis 嵌套查询XML配置怎么理解
1.右键单击桌面上的“我的电脑”,找到“设备管理器”并单击打开。
2.在设备管理器菜单中找到“网络适配器”,并点击前面的三角,这时出现了的就是网卡驱动。右键单击网卡驱动,选择“更新驱动程序软件”。
3.出现了两个选项,选择手动查找驱动程序并且安装,下一步选择刚才下载的驱动程序安装。
4.安装完成后,重启电脑。如果能够联网的情况下,可以让电脑自动检测并且安装,也可以通过鲁大师、驱动精灵、驱动人生等自动检测安装。
ibatis怎么执行sql语句
ibatis中,参数部分是用##表示的,这种格式的是字符串,会自动在内容两端加上单引号,$$表示的是原样输出,你这里有两个参数,且要求的是数值,所以要用$$,那么在ibatis的xml配置文件中,写法就是:
select *
from table
limit $count1$, $count2$.
而在java中,通过调用ibatis框架中的方法,将count1和count2变量的值传递进去就可以了。
ibatis怎么执行sql语句
ibatis中,参数部分是用##表示的,这种格式的是字符串,会自动在内容两端加上单引号,$$表示的是原样输出,你这里有两个参数,且要求的是数值,所以要用$$,那么在ibatis的xml配置文件中,写法就是:
select *
from table
limit $count1$, $count2$.
而在java中,通过调用ibatis框架中的方法,将count1和count2变量的值传递进去就可以了。
MyBatis如何写配置文件和简单使用
MyBatis 如何写配置文件和简单使用
MyBatis3.x
这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。
MyBatis的前世今生
MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis。
尽管如此,它的包结构仍然为ibatis。
www.mybatis.org/
https://github.com/mybatis
MyBatis介绍
MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。
MyBatis的优点:
1.基于SQL语法,简单易学。
2.能了解底层组装过程。
3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
4.程序调试方便。
所有sql语句,全部定义在xml(建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为mapper。
与传统JDBC的比较
减少了61%的代码量
最简单的持久化框架
架构级性能增强
SQL代码从程序代码中彻底分离,可重用
增强了项目中的分工
增强了移植性
canMyBatisDemo
包、类分布图:
mybatis只有一个包和一个数据库支持包。
mybatis-config.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>
<typeAliases>
<!-- 配置类型的别名 -->
<typeAlias alias="User" type="cn.hncu.domain.User" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8" />
<property name="username" value="hncu" />
<property name="password" value="1234" />
<property name="poolMaximumActiveConnections" value="5"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="cn/hncu/domain/User.xml"></mapper>
<mapper resource="cn/hncu/domain/User2.xml"></mapper>
</mappers>
</configuration>
SqlSessionUtils.java
package cn.hncu.utils;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
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.mysql.jdbc.interceptors.SessionAssociationInterceptor; public class SqlSessionUtils {
private static SqlSessionFactory sessionFactory=null;//DataSource--pool
static{
try {
InputStream in=Resources.getResourceAsStream("mybatis-config.xml");//加载配置文件
sessionFactory=new SqlSessionFactoryBuilder().build(in);
/*
* 这里给出一种不需要使用Resources类加载文件的方法(利用ClassLoader以底层加载配置文件)
sessionFactory=new SqlSessionFactoryBuilder().build(SqlSessionUtils.class.getClassLoader().getResourceAsStream("mybatis-config.xml"));
*/
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSessionFactory getSessionFactory(){
return sessionFactory;
}
public static SqlSession getSqlSession(){
return sessionFactory.openSession();
}
public static void main(String[] args) {
//mybatis在池中控制的是连接的数量
for(int i=0;i<10;i++){
SqlSession s=getSqlSession();
System.out.println(s);
Connection con=s.getConnection();
System.out.println("con: "+con);
}
}
}
User.java
package cn.hncu.domain;
public class User {
private String id;
private String name;
private String pwd;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
}
}
User的映射文件User.xml(最简单的配置文件)
package cn.hncu.domain;
import java.util.List;
public interface UserMapper {
public List<User> all();
public List<User> user2(String string);
public List<User> user3(User user);
}
UserMapper.java(接口,官方建议使用接口方式----更安全)
package cn.hncu.domain;
import java.util.List;
public interface UserMapper {
public List<User> all();
public List<User> user2(String string);
public List<User> user3(User user);
}
Demo1.java
package cn.hncu.demo;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import cn.hncu.domain.User;
import cn.hncu.domain.UserMapper;
import cn.hncu.utils.SqlSessionUtils;
public class Demo1 {
@Test
public void test1(){
//先获取SqlSession
SqlSession s=SqlSessionUtils.getSqlSession();
List<User> list=s.selectList("users.all");//返回结果用list封装,参数用id来指定使用映射文件中的哪一段,<select>或<insert>等sql操作
// List<User> list=s.selectList("all");//省略命名空间----如果名称(id)冲突,则必须使用命名空间来进行识别
//System.out.println(list);
for(User u:list){
System.out.println(u);
}
}
<span style="color:#ff0000;">//使用接口方式操作数据库(推荐使用这种方式,更安全)
/*步骤
* 1.写一个接口:UserMapper,接口中的抽象方法名必须和<select>的属性id值相同,即一个抽象方法代表一段操作
* 2.把User2.xml中的命名空间改成接口的完全类名
* 3.在测试代码中(又层的java),用"s.getMapper()"获得一个代理类对象,使用该对象调用某个方法,即执行某段操作
*/</span>
@Test//面向接口的方式,以下调用的都是: User2.xml
public void test2(){
//先获取SqlSession
SqlSession s=SqlSessionUtils.getSqlSession();
UserMapper m=s.getMapper(UserMapper.class);//获得一个代理对象
List<User>list=m.all();
System.out.println(list);
}
///////////////test3()演示条件查询中的单条件查询,调用User2.xml///////////////////
@Test//传统方式
public void test3_1(){
SqlSession s=SqlSessionUtils.getSqlSession();
// List<User> users=s.selectList("cn.hncu.domain.UserMapper.all");
List<User> users=s.selectList("user2","2");//返回结果用List封装,内部的元素文件类型由映射文件配置
System.out.println(users);
}
@Test//面向接口方式
public void test3_2(){
SqlSession s=SqlSessionUtils.getSqlSession();
UserMapper u=s.getMapper(UserMapper.class);
List<User> users=u.user2("3");
System.out.println(users);
}
///////////////////多条件查询(条件查询最好用对象封装条件)//////////////
@Test
public void test4(){
SqlSession s=SqlSessionUtils.getSqlSession();
UserMapper u=s.getMapper(UserMapper.class);
User user=new User();
user.setId("4");
user.setName("二蛋");
List<User> users=u.user3(user);
System.out.println(users);
}
@Test
public void test5(){//返回结果用map
SqlSession s=SqlSessionUtils.getSqlSession();
System.out.println(s);
List<Map<String,Object>> users=s.selectList("user4");
for(Map<String,Object> user:users){
System.out.println(user);
}
}
@Test//把输入参数设为map
public void test6(){
SqlSession s=SqlSessionUtils.getSqlSession();
Map<String, Object> map=new HashMap<String,Object>();
map.put("id", "5");
map.put("name", "小奇");
List<Map<String,Object>> users=s.selectList("user5",map);
for(Map<String,Object> user:users){
System.out.println(user);
}
}
}
User2.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="cn.hncu.domain.UserMapper">
<select id="all" resultType="cn.hncu.domain.User">
select * from users
</select>
</mapper>
-->
<mapper namespace="cn.hncu.domain.UserMapper">
<!-- 使用了类型别名 -->
<select id="all" resultType="User">
select * from users
</select>
<!--条件查询之单条件查询,下面的sql语句的参数可以随便写 -->
<select id="user2" resultType="User" parameterType="string">
select * from users where id=#{xx}
</select>
<!--条件查询之多条件查询,下面的sql语句的参数必须要和值对象的属性名一致(要用if条件式判断参数是否为空) -->
<select id="user3" resultType="User" parameterType="string">
select * from users where id=#{id}
<if test="name!=null">
and name=#{name}
</if>
</select>
<!-- 把查询结果封装成List<Map<>> -->
<select id="user4" resultType="map">
select * from users
</select>
<!-- 把输入参数封装成map类型 -->
<select id="user5" resultType="hashmap" parameterType="hashmap">
select * from users where id=#{id}
<if test="name!=null">
and name=#{name}
</if>
</select>
</mapper>
这里只是初次见到mybatis,知道了如何简单使用,具体复杂用法下次再贴出(对数据库的CRUD和使用过程中的一些细节)。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!您可能感兴趣的文章:Spring+SpringMVC+MyBatis深入学习及搭建(三)之MyBatis全局配置文件解析详解MyBatis批量插入数据Mapper配置文件的写法mybatis 项目配置文件实例详解MyBatis配置文件的写法和简单使用使用XSD校验Mybatis的SqlMapper配置文件的方法(2)使用XSD校验Mybatis的SqlMapper配置文件的方法(1)Mybatis Generator最完美配置文件详解(完整版)mybatis配置文件简介_动力节点Java学院整理ibatis循环批量插入数据,表中五个字段,id自增长,我需要把最重要的两个字段插入,怎么写xml的sql呢?
假设我们有一个java实体类User,它有三个属性:
1.2
3. private Integer id; //主键
private String name; //姓名
private double rate; //进度
构造方法、setter、getter都是正常且完善的。
数据库中有一张对应的t_user表:
1.2
3.4
5.6
7. --mysql数据库
create table t_user
(
id integer primary key auto_increment,
name varchar(20),
rate double
)engine=INNODB;
或者
1.2
3.4
5.6
7.8
9.10
--oracle数据库
create table t_user
(
id number(11) primary key,
name varchar2(20),
rate number(10,2)
);
--主键序列
create sequence seq_user_id;
在User.xml配置文件中,插入User的配置一般为:
<insert id="insertUser" parameterClass="User">
insert into t_user (ID, NAME, RATE) values (#id#, #name#, #rate#)
</insert>
这样,在java代码中调用方式为:
1. sqlMapper.insert("insertUser", user); //此处的user应该保证id是正确的
为了使用ibatis生成主键,我们可以使用如下配置:
1.2
3.4
5.6
7.8
<!-- mysql -->
<insert id="insertUserByAutoIncrement" parameterClass="User">
insert into t_user (NAME,RATE) values (#name#, #rate#)
<!-- 注意:上述SQL语句中不插入主键id -->
<selectKey resultClass="int" keyProperty="id">
SELECT LAST_INSERT_ID() AS VALUE
</selectKey>
</insert>
或者
<!-- Oracle -->
<insert id="insertUserBySequence" parameterClass="User">
<selectKey resultClass="int" keyProperty="id">
SELECT seq_user_id.NEXTVAL AS VALUE FROM DUAL
</selectKey>
<!-- 注意:下列SQL语句中必须插入ID -->
insert into t_user (ID, NAME, RATE) values (#id#, #name#, #rate#)
</insert>
注意,这里需要说明一下,不同的数据库,主键生成方式是不同的
mysql:SELECT LAST_INSERT_ID() AS VALUE
mssql:select @@IDENTITY as value
oracle:SELECT SEQUENCE.NEXTVAL [AS VALUE] FROM DUAL
还有一点需要注意的是有些数据库是预先生成 (pre-generate)主键的,如Oracle和PostgreSQL,有些数据库是事后生成(post-generate)主键的,如MySQL和SQL Server。所以如果是Oracle数据库,则需要将selectKey写在insert之前。追问这是复制的吧?你懂语言的话用你自己的理解说下。 你这方法是在让我创建一个entity来保存值放进集合。