增删改(DML)操作

  1. 增删改(DML)操作

     1.1事务(transaction)

  • 事务是数据库操作的最小单元,又ACID的特性,应该保证一个事务的sql语句要么同时成功,要么都不成功。
  • Mybatis中配置了事务管理器,type属性设置为JDBC。表示M ybatis采用和原生JDBC相同的事务管理机制。
  • 在Mybatis执行的开始时,将自动提交功能关闭了。所以,在执行DML操作时,需要手动提交事务。

      1.2新增(insert)

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE configuration
 3   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-3-config.dtd">
 5   <configuration>
 6       <properties resource="db.properties"/>
 7       <settings>
 8           <!-- 设置MyBatis使用log4j日志支持 -->
 9           <setting name="logImpl" value="LOG4J"/>
10       </settings>
11       <!-- typeAliases给类型取别名 -->
12       <typeAliases>
13           <!-- 给user类取别名 -->
14           <!-- <typeAlias type="com.bjsxt.pojo.User" alias="u"/> -->
15           <!-- 别名都是类的名字 -->
16           <package name="com.bjsxt.pojo"/>
17       </typeAliases>
18       <!-- 用于指定使用哪个开发
19                                 用于指定使用的环境id
20        -->
21       <environments default="dev">
22           <!-- 用于配置开发环境
23                id:环境的唯一识别码
24            -->
25           <environment id="dev">
26               <!-- 事务管理器
27                    type:用于设定mybatis采用什么方式管理事务
28                    JDBC表示和JDBC一样事务的管理方式
29                -->
30               <transactionManager type="JDBC"/>
31               <!-- 数据源/连接池
32                                                          用于配置链接池和数据库链接的参数
33                    type:用于设置mybatis是否采用链接池技术
34                                                         连接池:用来存数据库链接的,减少数据库的频繁开关
35                    POOLED表示mybatis采用连接池技术                                     
36                -->
37               <dataSource type="POOLED">
38                   <property name="driver" value="${jdbc.driver}"/>
39                   <property name="url" value="${jdbc.url}"/>
40                   <property name="username" value="${jdbc.username}"/>
41                   <property name="password" value="${jdbc.password}"/>
42               </dataSource>
43           </environment>
44       </environments>
45       <!-- 扫描mapper文件 -->
46       <!-- 文件的全限制路径要用/ -->
47       <mappers>
48           <mapper resource="com/bjsxt/mapper/UserMapper.xml"/>
49       </mappers>
50   </configuration>


1
<?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-|3-mapper.dtd"> 5 <!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类) 6 MyBatis管理SQL语句是通过namespace+id来定位的 7 --> 8 <mapper namespace="com.bjsxt.mapper.UserMapper"> 9 <!-- 新增 --> 10 <insert id="insUser" parameterType="user" > 11 insert into t_user values (default,#{username},#{password}) 12 </insert> 13 14 </mapper>

 

 1 package com.bjsxt.util;
 2 
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 
 6 import org.apache.ibatis.io.Resources;
 7 import org.apache.ibatis.session.SqlSession;
 8 import org.apache.ibatis.session.SqlSessionFactory;
 9 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
10 
11 public class MyBatisUtil {
12     
13     private static SqlSessionFactory factory=null;
14     static{
15         
16         try {
17             InputStream is=Resources.getResourceAsStream("mybatis.xml");
18             factory=new SqlSessionFactoryBuilder().build(is);
19         } catch (IOException e) {
20             // TODO Auto-generated catch block
21             e.printStackTrace();
22         }
23     }
24 
25     public static SqlSession getSession(){
26         SqlSession session =null;
27         if(factory!=null){
28             //true表示开启
29          session= factory.openSession(true);
30         }
31         return session;
32     }
33 }

 

 

 1 package com.bjsxt.test;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.junit.Test;
 5 
 6 import com.bjsxt.pojo.User;
 7 import com.bjsxt.util.MyBatisUtil;
 8 
 9 public class TestInsert {
10 @Test
11     public void testIns(){
12         SqlSession session = MyBatisUtil.getSession();
13         User user=new User();
14         user.setUsername("XIAOWEI");
15         user.setPassword("123");
16         
17         int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
18         if(num>0){
19             //提交事务
20             //session.commit();
21             System.out.println("SUCCESS!");
22         }else{
23             //session.rollback();
24             System.out.println("FAILED!");
25         }
26         //
27         session.close();
28     }
29 }

 

1.4修改和删除

 

 1 <?xml version="1.0" encoding="UTF-8" ?>
 2 <!DOCTYPE mapper
 3   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 4   "http://mybatis.org/dtd/mybatis-|3-mapper.dtd">
 5   <!-- namespa:命名空间,可以随意定义,一般情况下要写全限定路径(包名加类)
 6        MyBatis管理SQL语句是通过namespace+id来定位的
 7    -->
 8 <mapper namespace="com.bjsxt.mapper.UserMapper">
 9    <!-- 新增 -->
10  <insert id="insUser"  parameterType="user" >
11      insert into t_user values (4,#{username},#{password})
12  </insert>
13  
14  
15  <!-- 修改 -->
16  <update id="updUser"  parameterType="user" >
17     update  t_user set username=#{username},password=#{password} where id=#{id}
18  </update>
19  
20  <!-- 删除 -->
21  <delete id="delUser" parameterType="int">
22      delete from t_user where id=#{0}
23  </delete>
24 </mapper>

 

 

 

 1 package com.bjsxt.test;
 2 
 3 import org.apache.ibatis.session.SqlSession;
 4 import org.junit.Test;
 5 
 6 import com.bjsxt.pojo.User;
 7 import com.bjsxt.util.MyBatisUtil;
 8 
 9 public class TestInsert {
10     @Test
11     public void testDel(){
12         SqlSession session =MyBatisUtil.getSession();
13         
14     int num=session.update("com.bjsxt.mapper.UserMapper.delUser", 9);
15         if(num>0){
16             session.commit();
17             System.out.println("success");
18             
19         }else
20         {
21             System.out.println("false");
22             session.rollback();
23         }
24         session.close();
25     }
26     @Test
27     public void testUpd(){
28         SqlSession session = MyBatisUtil.getSession();
29         
30         User user1=new User();
31         user1.setId(4);
32         user1.setUsername("daming");
33         user1.setPassword("abc");
34         
35     int num=session.update("com.bjsxt.mapper.UserMapper.updUser", user1);
36         if(num>0){
37             session.commit();
38             System.out.println("success");
39             
40         }else
41         {
42             System.out.println("false");
43             session.rollback();
44         }
45         session.close();
46     }
47 @Test
48     public void testIns(){
49         SqlSession session = MyBatisUtil.getSession();
50         User user=new User();
51         user.setUsername("XIAOWEI");
52         user.setPassword("123");
53         
54         int num=session.insert("com.bjsxt.mapper.UserMapper.insUser",user);
55         if(num>0){
56             //提交事务
57             //session.commit();
58             System.out.println("SUCCESS!");
59         }else{
60             //session.rollback();
61             System.out.println("FAILED!");
62         }
63         //
64         session.close();
65     }
66 }

 

转载于:https://www.cnblogs.com/wq-9/p/10222568.html

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值