mybatis在xml中生成guid,插入到mysql数据库,sql怎么写

mybatis在xml中生成guid,插入到mysql数据库,sql怎么写,第1张

首先mysql 没有guid()函数,oracle才有,mysql的是 uuid()函数,使用方法是:

insert into pub_attachments(vchr_id,vchr_domain)) values(uuid(),'ibm');

mybatis自增主键配置:mybatis进行插入 *** 作时,如果表的主键是自增的,针对不同的数据库相应的 *** 作也不同。基本上经常会遇到的就是OracleSequece和Mysql自增主键。主要说明下在mybatis中对于自增主键的配置。1、不返回自增主键值:如果考虑到插入数据的主键不作为其他表插入数据的外键使用,可以考虑这种方式。OracleSequence配置TEST_USERSEQ_TEST_USER_IDnextval insert into (ID,NAME,AGE) values ( ,#{name}, #{age} ) 当插入语句如上配置时,那么针对如下语句 User user = new User(); usersetName("test"); usersetAge(24); userMapperinsert(user); Systemoutprintln(userid); // userid 为空userid为空,也就是说如上的配置并不能在完成插入 *** 作后将插入时的主键值存放到保存的对象中。2、Mysql自增主键配置由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,不指定插入ID字段即可。主键的自增交由Mysql来管理。TEST_USER insert into (NAME,AGE) values (#{name}, #{age} )同样,针对Mysql如此配置mybaits,插入完成后userid为空。插入后获取自增主键值:上述的情况能满足大部分情况,但有时候我们会遇到类似一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用mybatis提供的来单独配置针对自增逐渐的处理。1、OracleSequence配置:TEST_USER SEQ_TEST_USER_IDnextval select from dual insert into (ID,NAME,AGE) values ( #{id}, #{name}, #{age} ) 当使用了后,在实际的插入 *** 作时,mybatis会执行以下两句SQL:select SEQ_TEST_USER_IDnextval from dual; // 语句1 insert into (ID,NAME,AGE) values ( , , ); // 语句2在执行插入 语句2 之前,会先执行 语句1 以获取当前的ID值,然后mybatis使用反射调用User对象的setId方法,将 语句1 查询出的值保存在User对象中,然后才执行 语句2 这样就保证了执行完插入后User user = new User(); usersetName("test"); usersetAge(24); userMapperinsert(user); Systemoutprintln(userid); // userid 不为空userid是有值的。2、Mysql自增主键配置针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键,TEST_USER insert into ( NAME, AGE ) values ( #{name}, #{age} ) 当然,由于Mysql的自增主键可以通过SQL语句select LAST_INSERT_ID();来获取的。因此针对Mysql,Mybatis也可配置如下:TEST_USER SELECT LAST_INSERT_ID() insert into (ID,NAME,AGE) values ( #{id}, #{name}, #{age} ) 只不过该中配置需要额外的一条查询SQL小结当数据插入 *** 作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式来配置插入语句,这样可以避免额外的SQL开销当执行插入 *** 作后需要立即获取插入的自增主键值,比如一次 *** 作中保存一对多这种关系的数据,那么就要使用 插入后获取自增主键值 的方式配置

mybatis连mysql的url怎么写

最近公司项目要使用myBatis,自己以前没有接触过,就在网上找到了一些资料研究了些。初步做出了基于myBatis连接mysql数据库的jdbc实现的功能。

employeejava

package comorgpositionmodel;

public class employee {

private int employeeId;// 员工id

private String employeeName; //员工姓名

private String employeeSax; //员工性别

private String employeePost; //员工职务

private String employeeDepartment; //员工所在部门

public int getEmployeeId() {

return employeeId;

}

public void setEmployeeId(int employeeId) {

thisemployeeId = employeeId;

}

public String getEmployeeName() {

return employeeName;

}

public void setEmployeeName(String employeeName) {

thisemployeeName = employeeName;

}

public String getEmployeeSax() {

return employeeSax;

}

public void setEmployeeSax(String employeeSax) {

thisemployeeSax = employeeSax;

}

public String getEmployeePost() {

return employeePost;

}

public void setEmployeePost(String employeePost) {

thisemployeePost = employeePost;

}

public String getEmployeeDepartment() {

return employeeDepartment;

}

public void setEmployeeDepartment(String employeeDepartment) {

thisemployeeDepartment = employeeDepartment;

}

}

import javasqlConnection ;

import javasqlDriverManager ;

import javasqlSQLException ;

public class ConnectionDemo{

// 定义MySQL的数据库驱动程序

public static final String DBDRIVER = "orggjtmmmysqlDriver" ;

// 定义MySQL数据库的连接地址

public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;

// MySQL数据库的连接用户名

public static final String DBUSER = "root" ;

// MySQL数据库的连接密码

public static final String DBPASS = "mysqladmin" ;

public static void main(String args[]){

Connection conn = null ; // 数据库连接

try{

ClassforName(DBDRIVER) ; // 加载驱动程序

}catch(ClassNotFoundException e){

eprintStackTrace() ;

}

try{

conn = DriverManagergetConnection(DBURL,DBUSER,DBPASS) ;

}catch(SQLException e){

eprintStackTrace() ;

}

Systemoutprintln(conn) ; // 如果此时可以打印表示连接正常

try{

connclose() ; // 数据库关闭

}catch(SQLException e){

eprintStackTrace() ;

}

}

};

为什么mysql数据库对应的字段有数据但是使用mybatis取出是0 或null

首先换数据库,MySQL处理这个数量级数据比较吃力。推荐你用DB2 或ORACLE

如果不能换,检查一下存储引擎用InnoDB,如果是,检查

innodb_flush_log_at_trx_commit 这个选项,是否是1

如果是1 用SET AUTOCOMMIT = 0 ,提高数据修改速度

PHP优化需要

MySQL Slow Log 分析工具分析日志:mysqldumpslow或mysqlsla比较不错。

Explain/ DESC 分析SQL 的执行情况和SHOW PROCESSLIST

使用SHOW PROCESSLIST 看是否有锁表情况,

设置 mycnf 中的long-query-time 和log-slow-queries 记录服务器那些SQL执行速度比较慢

根据上述情况查看对对应的SQL语句进行优化

优化服务器性能,用RAID5(SAN),加内存本身的升级,提高硬盘I/O性能。

数据库总体性能优化:

数据表最好能拆成小表。

数据库切片,分到不用的服务器上,

数据库访问性能优化

修改mycnf, 下面是影响比较大的:

innodb_flush_log_at_trx_commit 设置为0

如果比下面值大就不用调整了:

query_cache_size 设置为16M

sort_buffer_size 设置为16M

record_buffer 设置为16M

key_buffer_size 设置为8M

innodb_buffer_pool_size 设置为32M

下面是建议设置的

table_cache 设置为512

read_buffer_size 设置为16M

myisam_sort_buffer_size设置为16M

innodb_additional_mem_pool_size 设置为128M

innodb_log_file_size 设置为256M

innodb_log_buffer_size设置为8M

数据库表优化,

1 建立相应的INDEX

2 统一编码,MySQL的默认编码是Latin1,不支持中文,需要把数据库的默认编码修改为gbk或者utf8

show variables like 'character%' 查看

另外表的编码也要与数据库统一

`ctrl+alt+shift+T`重构选区,可以将选区抽取成变量,方法等。不同的重构方式有 整合的REPL,由于JetBrains的加成可以实现很多与编辑器内相同的效果 整合

这个错误报文上写的很明确啊。就是在你那个数据库中gettreeobjsV4_result 表根本不存在。所以报的jdbc的错误啊。

你使用mysql fount 看一下 select from gettreeobjsV4_result

有没有问题。

mybatis自增主键配置:

mybatis进行插入 *** 作时,如果表的主键是自增的,针对不同的数据库相应的 *** 作也不同。基本上经常会遇到的就是 Oracle Sequece 和 Mysql 自增主键。主要说明下在mybatis中对于自增主键的配置。

1、不返回自增主键值:

如果考虑到插入数据的主键不作为其他表插入数据的外键使用,可以考虑这种方式。

Oracle Sequence 配置

<sql id='TABLE_NAME'>TEST_USER</sql>

<sql id='TABLE_SEQUENCE'>SEQ_TEST_USER_IDnextval</sql>

 <!-- 注意这里直接调用sequence的nextval函数 -->

 <insert id="insert" parameterType="User">

     insert into <include refid="TABLE_NAME" /> (ID,NAME,AGE)

         values ( <include refid="TABLE_SEQUENCE" /> ,#{name}, #{age} )

 </insert>

当插入语句如上配置时,那么针对如下语句

 User user = new User();

 usersetName("test");

 usersetAge(24);

 userMapperinsert(user);

 Systemoutprintln(userid); // userid 为空

userid为空,也就是说如上的配置并不能在完成插入 *** 作后将插入时的主键值存放到保存的对象中。

2、Mysql自增主键配置

由于mysql数据库中,可以设置表的主键为自增,所以对于Mysql数据库在mybatis配置插入语句时,不指定插入ID字段即可。主键的自增交由Mysql来管理。

<sql id='TABLE_NAME'>TEST_USER</sql>

<!-- 注意这里的插入SQL中是没有指明ID字段的! -->

<insert id="insert" parameterType="User">

    insert into <include refid="TABLE_NAME" /> (NAME,AGE)

        values (#{name}, #{age} )

</insert>

同样,针对Mysql如此配置mybaits,插入完成后userid为空。

插入后获取自增主键值:

上述的情况能满足大部分情况,但有时候我们会遇到类似一对多的那种表结构,在插入多端数据时,需要获取刚刚保存了的一段的主键。那么这个时候,上述的配置就无法满足需要了。为此我们需要使用mybatis提供的<selectKey />来单独配置针对自增逐渐的处理。

1、Oracle Sequence 配置:

<sql id='TABLE_NAME'>TEST_USER</sql>

 <sql id='TABLE_SEQUENCE'>SEQ_TEST_USER_IDnextval</sql>

 <!-- 注意这里需要先查询自增主键值 -->

 <insert id="insert" parameterType="User">

     <selectKey keyProperty="id" resultType="int" order="BEFORE">

         select <include refid="TABLE_SEQUENCE" /> from dual

     </selectKey>

     insert into <include refid="TABLE_NAME" /> (ID,NAME,AGE)

         values ( #{id}, #{name}, #{age} )

 </insert>

当使用了<selectKey />后,在实际的插入 *** 作时,mybatis会执行以下两句SQL:

select SEQ_TEST_USER_IDnextval from dual; // 语句1

 insert into (ID,NAME,AGE) values ( , ,  ); // 语句2

在执行插入 语句2 之前,会先执行 语句1 以获取当前的ID值,然后mybatis使用反射调用User对象的setId方法,将 语句1 查询出的值保存在User对象中,然后才执行 语句2 这样就保证了执行完插入后

User user = new User();

 usersetName("test");

 usersetAge(24);

 userMapperinsert(user);

 Systemoutprintln(userid); // userid 不为空

userid是有值的。

2、Mysql自增主键配置

针对于Mysql这种自己维护主键的数据库,可以直接使用以下配置在插入后获取插入主键,

<sql id='TABLE_NAME'>TEST_USER</sql>

 <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="User">

     insert into <include refid="TABLE_NAME" /> ( NAME, AGE )

         values ( #{name}, #{age} )

 </insert>

当然,由于Mysql的自增主键可以通过SQL语句

select LAST_INSERT_ID();

来获取的。因此针对Mysql,Mybatis也可配置如下:

<sql id='TABLE_NAME'>TEST_USER</sql>

 <!-- 注意这里需要先查询自增主键值 -->

 <insert id="insert" parameterType="User">

     <selectKey keyProperty="id" resultType="int" order="BEFORE">

         SELECT LAST_INSERT_ID()

     </selectKey>

     insert into <include refid="TABLE_NAME" /> (ID,NAME,AGE)

         values ( #{id}, #{name}, #{age} )

 </insert>

只不过该中配置需要额外的一条查询SQL

小结

当数据插入 *** 作不关心插入后数据的主键(唯一标识),那么建议使用 不返回自增主键值 的方式来配置插入语句,这样可以避免额外的SQL开销

当执行插入 *** 作后需要立即获取插入的自增主键值,比如一次 *** 作中保存一对多这种关系的数据,那么就要使用 插入后获取自增主键值 的方式配置

以上就是关于mybatis在xml中生成guid,插入到mysql数据库,sql怎么写全部的内容,包括:mybatis在xml中生成guid,插入到mysql数据库,sql怎么写、mybatis+mysql运行问题,一直提示Column 'id' not found.、mybatis连mysql的url怎么写等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/9630135.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存