mybitis实现增,删,改,查,模糊查询的两种方式:(2)

方式二:mapper代理接口方式

这种方式只需要xml+接口(不用写实体类)但是需要符合三个规范

  • 使用mapper'代理接口方式
  • 在同一目录下(可以创建一个源文件夹,达到类文件和xml文件分类的作用)
  • xml中namespace:命名空间为接口的全限定名(包名+类名)
  • xml的文件名和接口的文件名相同,只是后缀名不同
  • 接口中的方法名和xml中sql的id相同

1.创建一个java工程

2.将mysql的jar,mybatis的jar添加到构建路径中

3.写好配置文件

4.连接到数据库

5.写一个和数据库表对应的pojo类(普通的java对象)

6.写一个接口

 1 package impl;
 2 
 3 import java.util.List;
 4 
 5 import entity.Login;
 6 
 7 public interface LoginImpl {
 8     //方法名要与xml文件中的id的唯一标识符相同
 9     List<Login> selectAll();
10     Login selectbyid(int id);
11     int insertone(Login lg);
12     int updateone(Login lg);
13 }

 

7.写对应的xml文件

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 3 "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
 4 
 5 <!-- namespace:命名空间, 用于隔离sql语句 -->
 6 <mapper namespace="impl.LoginImpl">
 7 <!-- id是sql语句的唯一标识符,名字要与 接口中的方法名相同 -->
 8 
 9       <select id="selectAll" resultType="Login">
10           select * from t_login 
11       </select>
12       
13       <select id="selectbyid" parameterType="int" resultType="Login">
14           select *from t_login where id =#{id}
15       </select>
16       
17       <insert id="insertone" parameterType="Login" >
18           
19           insert into t_login (username,password) values(#{username},#{password})
20       </insert>
21       
22       <update id="updateone" parameterType="Login">
23           update t_login set username=#{username},password=#{password} where id = #{id}
24       </update>
25       
26       
27 </mapper>

 

8.写测试类

 1 package test;
 2 
 3 
 4 import java.io.InputStream;
 5 import java.util.List;
 6 
 7 import org.apache.ibatis.io.Resources;
 8 import org.apache.ibatis.session.SqlSession;
 9 import org.apache.ibatis.session.SqlSessionFactory;
10 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
11 
12 import entity.Login;
13 import impl.LoginImpl;
14 
15 public class Login_Test {
16 
17     
18 
19     public static void main(String[] args) throws Exception {
20         // TODO 自动生成的方法存根
21         //读取配置文件
22         String resource = "main_config.xml";
23         InputStream is = Resources.getResourceAsStream(resource);
24         //使用建造者Builder创建sqlsession工厂
25         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
26         //打开session
27         SqlSession sqlSession = sqlSessionFactory.openSession();
28         System.out.println("数据库已经连接"+sqlSession);
29         //使用mapper代理的方式
30          LoginImpl loginImpl = sqlSession.getMapper(LoginImpl.class);
31          /**
32           * 查询所有
33           * List<Login> list = sqlSession.selectList("selectAll");
34           */
35          List<Login> selectAll = loginImpl.selectAll();
36          System.out.println("---------------查询所有用户------------");
37          for (Login login2 : selectAll) {
38             System.out.println("用户id="+login2.getId()+"\t\t用户名="+login2.getUsername()+"\t用户密码="+login2.getPassword());
39         }
40         
41          /**
42           * 通过id查询用户
43           * Login login = sqlSession.selectOne("selectbyid", 3);
44           */
45         System.out.println("-------------通过id查询用户---------------");
46          Login selectbyid = loginImpl.selectbyid(3);
47          System.out.println("通过id查询用户"+selectbyid);
48          
49          /**
50           * 插入一条数据
51           * insert = sqlSession.insert("insertone", login2);
52           */
53          System.out.println("-------------插入一条数据-----------");
54          Login login2 = new Login();
55          login2.setUsername("xy");
56          login2.setPassword("315364");
57          int insertone = loginImpl.insertone(login2);
58          System.out.println("插入一条数据成功"+insertone);
59          
60          /**
61           * 更新一条数据
62           * sqlSession.update("updateone", login3);
63           */
64          System.out.println("--------------更新一条数据------------");
65         Login login3 = new Login( 3, "333333","dhao");
66         int updateone = loginImpl.updateone(login3);
67         System.out.println("更新一条数据成功"+updateone);
68         //提交数据到数据库
69         sqlSession.commit();
70         //关闭会话
71         sqlSession.close();
72         
73         
74         
75         
76 
77     }
78 
79 }

 

9.项目的结构

 

10.mybatis的主配置文件  文件名:main_config.xml

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 3  "http://mybatis.org/dtd/mybatis-3-config.dtd" >
 4 <configuration>
 5 <!-- 别名标签 -->
 6 <!--把鼠标移到configuration标签上面会出现以下信息:原因是因为引入了dtd约束文件 Element : configuration
 7 Copyright 2009-2016 the original author or authors. Licensed under the Apache License, Version 2.0 
 8  (the "License"); you may not use this file except in compliance with the License. You may obtain a copy 
 9  of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or 
10  agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, 
11  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License 
12  for the specific language governing permissions and limitations under the License.
13 
14 Content Model : (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, 
15  objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)  -->
16  
17  <!-- 引入配置文件 属性标签 -->
18 <properties resource="mapper/main_config.properties"></properties>
19 
20 <!-- 别名    在单个配置文件中 写别名即可-->
21 <typeAliases>    
22     <typeAlias type="entity.Login" alias="login"/>
23     <!-- 自动生成包下面的所有类的别名,别名就是类名,并且首字母大小写都可以使用 -->
24     <package name="impl"/>
25 </typeAliases>
26 <!-- 使用哪个小环境  default就等于哪个小环境的id -->
27     <environments default="development">
28     
29         <environment id="development">
30             <!-- jdbc事务管理 -->
31             <transactionManager type="JDBC"></transactionManager>
32             <!-- 数据库连接池 -->
33             <dataSource type="POOLED">
34                 <property name="driver" value="${driver}"/>
35                 <!-- localhost可以用127.0.0.1或者本机的ip地址表示 -->
36                 <property name="url" value="${url}"/>
37                 <property name="username" value="${username}"/>
38                 <property name="password" value="${password}"></property>
39             </dataSource>
40         </environment>
41         
42         <environment id="mysql">
43             <!-- jdbc事务管理 -->
44             <transactionManager type="JDBC"></transactionManager>
45             <!-- 数据库连接池 -->
46             <dataSource type="POOLED">
47                 <property name="driver" value="${driver}"/>
48                 <!-- localhost可以用127.0.0.1或者本机的ip地址表示 -->
49                 <property name="url" value="${url}"/>
50                 <property name="username" value="${username}"/>
51                 <property name="password" value="${password}"></property>
52             </dataSource>
53         </environment>
54     </environments>
55     
56     <!-- 引入单个映射配置文件  *号表示0个或者多个 -->
57     <mappers>
58         <mapper resource="mapper/login_mapper.xml"/>
59         <!-- <package name="impl"/> -->
60     </mappers>
61 </configuration>

 

11.主配置文件的属性文件  

 

 

转载于:https://www.cnblogs.com/xyblogs/p/8947494.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254752.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言中的静态函数的作用

转载 在C语言中为什么要用静态函数(static function)&#xff1f;如果不用这个static关键字&#xff0c;好象没有关系。那么&#xff0c;用了static以后&#xff0c;有什么作用呢&#xff1f;我们知道&#xff0c;用了static的变量&#xff0c;叫做静态变量&#xff0c;其意义是…

[转] sql server 跨数据库调用存储过程

A库存储过程&#xff1a; create PROCEDURE [dbo].[spAAAForTest] ( UserName nvarchar(20) null ,LoginPwd nvarchar(60) null ) AS BEGINselect NA AS a, NB AS B, NC AS C;END 同一台服务器实例&#xff0c;A&#xff0c;B两个数据库&#xff0c;…

get_metrology_object_result_contour查询计量对象的结果轮廓

目录get_metrology_object_result_contour&#xff08;算子&#xff09;描述参数get_metrology_object_result_contour&#xff08;算子&#xff09; get_metrology_object_result_contour - 查询计量对象的结果轮廓。 get_metrology_object_result_contour&#xff08;&…

ABB 机器人 压包指令PackRawBytes 解包指令UnpackRawBytes

ABB 压包指令PackRawBytes 解包指令UnpackRawBytes PackRawBytes- 将数据导入 rawbytes 数据。 使用方法 PackRawBytes 用于将 num, dnum, byte,或者 string类型的数据&#xff0c;打包到 rawbytes 类型的变量中. 基本举例 &#xff1a; VAR rawbytes raw_…

C语言中使用静态函数的好处

静态函数会被自动分配在一个一直使用的存储区&#xff0c;直到退出应用程序实例&#xff0c;避免了调用函数时压栈出栈&#xff0c;速度快很多。 关键字“static”&#xff0c;译成中文就是“静态的”&#xff0c;所以内部函数又称静态函数。但此处“static”的含义不是指存储方…

react+redux+generation-modation脚手架搭建一个todolist

TodoList1. 编写actions.js2. 分析state 试着拆分成多个reducer3. 了解store4. 了解redux数据流生命周期5. 分析容器组件和展示组件 搞清楚&#xff0c;数据到底是如何流动的&#xff1f;6. 编写展示组件的代码7. 编写容器组件8. 传入store9. 总结10. 参考TodoList 脚手架Githu…

c++11 原子类型与原子操作

1、原子类型和原子操作&#xff08;1&#xff09;类型&#xff08;2&#xff09;操作&#xff08;3&#xff09;详述● 原子类型只能从其模板参数类型中进行构造&#xff0c;标准不允许原子类型进行拷贝构造、移动构造&#xff0c;以及使用operator等● atomic_flag 是一个原子…

get_metrology_object_measures获取测量区域和计量模型的计量对象的边缘位置结果

目录get_metrology_object_measures&#xff08;算子&#xff09;描述参数get_metrology_object_measures&#xff08;算子&#xff09; get_metrology_object_measures - 获取测量区域和计量模型的计量对象的边缘位置结果。 get_metrology_object_measures&#xff08;&…

依弗科(上海)机电设备有限公司

机器人喷涂倒计时&#xff0c;上帝帮我实现愿望吧 阿门 &#xfeff;&#xfeff;&#xfeff;&#xfeff;

外部变量和外部函数

C程序由一组对象组成&#xff0c;这些对象包括程序中所使用的变量和实现特定功能的函数。变量可以分为函数内部定义、使用的变量和函数外部定义的变量&#xff0c;通常情况下&#xff0c;把函数内部定义、使用的变量称为内部变量或局部变量&#xff0c;而将在函数外部定义的、供…

gulp中使用babel-polyfill编译es6拓展语法

今天想在新项目中使用es6的generators&#xff0c;发现虽然gulp已经有了babel编译&#xff0c;但仍会报错&#xff0c;网上查找后发现解决办法是加载polyfill&#xff0c;但是找到的办法都不试用我的项目。 解决办法&#xff1a;在index.html中加载node_modules的babel-polyfil…

CoDeSys

&#xfeff;&#xfeff;CoDeSys是全球最著名的PLC内核软件研发厂家德国的3S&#xff08;SMART&#xff0c;SOFTWARE&#xff0c;SOLUTIONS&#xff09;公司出的一款与制造商无关的IEC 61131-1编程软件。CoDeSys 支持完整版本的IEC61131标准的编程环境&#xff0c;支持标准的六…

使用halcon结合机械XY轴对相机进行9点标定

小哥哥小姐姐觉得有用点个赞呗&#xff01; 先在halcon中计算仿射变换矩阵并验证 //在图像中找到的模板中心位置 PicX:[1680.721,2065.147,911.499,526.798,1290.920,1285.731,1300.953] PicY:[968.321,964.366,976.283,980.035, 587.055,394.727,1355.487] //与图像中查找…

Ubuntu Linux 提出新的发布模式——测试周

2019独角兽企业重金招聘Python工程师标准>>> 导读开源技术项目最大的优势之一就是社区的每个人都可以自由地提出想法&#xff0c;如果获得社区支持&#xff0c;它可以变成现实。著名的 Ubuntu 开发人员 Simon Quigley 就提出了一个可能改变 Ubuntu Linux 开发过程的…

264 I和IDR

I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便&#xff0c;要首个I帧和其他I帧区别开&#xff0c;所以才把第一个首个I帧叫IDR&#xff0c;这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列…

gen_caltab生成标定文件

目录gen_caltab&#xff08;算子&#xff09;描述参数gen_caltab&#xff08;算子&#xff09; gen_caltab - 为具有矩形排列标记的校准板生成校准板描述文件和相应的PostScript文件。 gen_caltab&#xff08;:: XNum&#xff0c;YNum&#xff0c;MarkDist&#xff0c;Diamet…

主席树,喵~

稍微总结一下主席树吧 Too Difficult&#xff01;搞了一天搞出一大堆怎么令人悲伤的辣鸡代码。总之先总结一下吧&#xff0c;以后碰到这种问题直接拿去毒害队友好了。 UPD 5/24 苟狗是沙比 一个节点记录三个信息&#xff1a;lson,rson,sum 用pid表示节点个数。 build void buil…

【转】小白级的CocoaPods安装和使用教程

原文网址&#xff1a;http://www.jianshu.com/p/e2f65848dddc 百度有很多CocoaPods的安装教程.第一次看的时候,确实有点摸不透的感觉.经过思考,一步一步来实践,前后花了三十几分钟,才顺利使用..所以想了想,我还是写一个小白级的教程吧.细到每一个细节都说明. 让你不用10分钟解决…