【转载】java Mybatis学习---连接MySQL数据库

7 篇文章 0 订阅
2 篇文章 0 订阅

本文转载自https://www.cnblogs.com/xqz0618/p/javaweb03.html

博客里面所有红字均为本博主为小萌新们解答报错的地方,如果可以的话盛唐希望亲们的点赞呢

【MyBatis介绍】

 

MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架。
MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果集的检索。
MyBatis 使用简单的 XML 或注解用于配置和原始映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java 对象)映射成数据库中的记录。

每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。
SqlSessionFactoryBuilder可以从一个xml配置文件或者一个预定义的配置类的实例获得。
 
用xml文件构建SqlSessionFactory实例是非常简单的事情。推荐在这个配置中使用类路径资源(classpath resource),但你可以使用任何Reader实例,包括用文件路径或file://开头的url创建的实例。
MyBatis有一个实用类----Resources,它有很多方法,可以方便地从类路径及其它位置加载资源。
 
MyBatis 最强大的特性之一就是它的动态语句功能。如果您以前有使用JDBC或者类似框架的经历,您就会明白把SQL语句条件连接在一起是多么的痛苦,
要确保不能忘记空格或者不要在columns列后面省略一个逗号等。动态语句能够完全解决掉这些痛苦。尽管与动态SQL一起工作不是在开一个party,但是MyBatis确实能通过在任何映射SQL语句中

 

【步骤】

①获取MyBatis加包(在😁项目基础上使用MyBatis)

  在https://mvnrepository.com/上搜索MyBatis可以选择相应的版本

  

 

②在pop.xml中添加以下代码,管理Mybatis加包

 

 <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
 <dependency>
     <groupId>org.mybatis</groupId>
     <artifactId>mybatis</artifactId>
     <version>3.5.0</version>
 </dependency>

 

🌂在Java Resources中创建conf.xml

  

  

④配置数据库连接信息(盛唐友情提示:下面驱动"com.mysql.cj.Driver"是mysql驱动在10版本以上的驱动名称,10以下为"com.mysql.jdbc.Driver",同时记得根据自己的mysql版本提前在pom.xml里面加入mysql驱动的依赖哦,这里就不做赘述了。)

 

 <?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>
     <environments default="development">
         <environment id="development">
             <transactionManager type="JDBC" />
             <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                 <property name="url" value="jdbc:mysql://服务器地址:端口号/数据库名称?serverTimezone=GMT%2B8" />
                 <property name="username" value="数据库用户名" />
                 <property name="password" value="数据库密码" />
             </dataSource>
         </environment>
     </environments>     
     
 </configuration>

 

 

😭查询数据库中S_User表数据----建立对应的实体类

    

  

 

 package com.springdemo.model;
 
 public class User {
 
     public User(String userId, String userName, String userPwd, String userPower) {
         super();
         this.userId = userId;
         this.userName = userName;
         this.userPwd = userPwd;
         this.userPower = userPower;
     }
     
     public User() {
         super();        
     }
 
     private int _key;
     private String userId;
     private String userName;
     private String userPwd;
     private String userPower;
     
     public int get_key() {
         return _key;
     }
 
     public void set_key(int _key) {
         this._key = _key;
     }
 
     public String getUserId() {
         return userId;
     }
 
     public void setUserId(String userId) {
         this.userId = userId;
     }
 
     public String getUserName() {
         return userName;
     }
 
     public void setUserName(String userName) {
         this.userName = userName;
     }
 
     public String getUserPwd() {
         return userPwd;
     }
 
     public void setUserPwd(String userPwd) {
         this.userPwd = userPwd;
     }
 
     public String getUserPower() {
         return userPower;
     }
 
     public void setUserPower(String userPower) {
         this.userPower = userPower;
     }
 
     @Override
     public String toString() {
         return "User [key=" + _key + ",id="+userId+" name=" + userName + ", power=" + userPower + "]";
     }
 }

 

注:创建get ,set,构造函数快捷键(右键--> source )

  

 

⑥创建User表Sql查询映射文件userMapper.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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
 例如namespace="com.springdemo.mapping.userMapper"就是com.springdemo.mapping(包名)+userMapper(userMapper.xml文件去除后缀)
  -->
 <mapper namespace="com.springdemo.mapping.userMapper">
     <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getUser,id属性值必须是唯一的,不能够重复
     使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
     resultType="com.springdemo.model.User"就表示将查询结果封装成一个User类的对象返回
     User类就是users表所对应的实体类
     -->
  
     <!-- 根据_key查询得到一个user对象-->
     <select id="getUser" parameterType="int" 
         resultType="com.springdemo.model.User"> <!-- 创建对应user实体类的位置 -->
         select * from S_USER where _key=#{id}
     </select> 
 </mapper>

 

⑦在conf.xml文件中注册userMapper.(<configuration>标签内)

   <mappers>
         <!-- 注册userMapper.xml文件, 
         userMapper.xml位于com.springdemo.mapping这个包下,所以resource写成com/springdemo/mapping/userMapper.xml-->
         <mapper resource="com/springdemo/mapping/userMapper.xml"/>
   </mappers>

 

⑧使用Test.java 文件添加测试

 

 package com.springdemo.impl;
 
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
 import java.util.List;
 
 import com.springdemo.model.User;
 import com.springdemo.tools.DBTools;
 
 import org.apache.ibatis.io.Resources;
 import org.apache.ibatis.session.SqlSession;
 import org.apache.ibatis.session.SqlSessionFactory;
 import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
 public class Test {
 
     public static void main(String[] args) throws IOException {
     
         //mybatis的配置文件
         String resource = "conf.xml";
         //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
         
         InputStream is = Resources.getResourceAsStream(resource);
         //构建sqlSession的工厂
        
         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
         //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
         //Reader reader = Resources.getResourceAsReader(resource); 
         //构建sqlSession的工厂
         //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
         //创建能执行映射文件中sql的sqlSession
         SqlSession session = sessionFactory.openSession();
         /**
          * 映射sql的标识字符串,
          * me.gacl.mapping.userMapper是userMapper.xml文件中mapper标签的namespace属性的值,
          * getUser是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
          */
         
     /* 根据——key查找 */
         String statement = "com.springdemo.mapping.userMapper.getUser";
         //映射sql的标识字符串,getUser与映射文件中配置select标签id一致
         //执行查询返回一个唯一user对象的sql
         User user = session.selectOne(statement,2);
         System.out.println(user);
         
 }

 

盛唐友情提供:sql脚本如下

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for s_user
-- ----------------------------
DROP TABLE IF EXISTS `s_user`;
CREATE TABLE `s_user`  (
  `userId` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `userPwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `userPower` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL,
  `_key` int(255) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`_key`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Compact;

-- ----------------------------
-- Records of User
-- ----------------------------
INSERT INTO `s_user` VALUES ('1', '1', '1', '1', 1);
INSERT INTO `s_user` VALUES ('2', '2', '2', '2', 2);
INSERT INTO `s_user` VALUES ('wll', 'wll', '123456', '7000', 3);

SET FOREIGN_KEY_CHECKS = 1;

⑨执行结果

  

盛唐友情提示:这里如果不了解maven的运行机制的同学会出现如下问题

这个问题是maven项目默认是没有将未放在resources的文件com/mapping/userMapper.xml加入项目当中,在pom.xml里面引用即可

    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>com/springdemo/mapping/userMapper.xml</include>
                </includes>
            </resource>
        </resources>
    </build>

【增删改查】

  修改userMapper.xml统一管理返回类型

 

 <resultMap id="userMap" type="com.springdemo.model.User">
         <id property="_key" column="_key" javaType="java.lang.Integer"></id>
         <result property="userId" column="userId" javaType="java.lang.String"></result>
         <result property="userName" column="userName" javaType="java.lang.String"></result>
         <result property="userPwd" column="userPwd" javaType="java.lang.String"></result>
         <result property="userPower" column="userPower" javaType="java.lang.String"> 
 </result>
</resultMap>

 

  resultMap设置对应的实体类

 

①查询所有user记录

   🍕userMapper.xml配置

  <select id="selectUser" resultMap="userMap"> 
     select * from s_user 
  </select>

  resultMap设置返回的ReusltMap

  🍔测试java代码

  String stateselect = "com.springdemo.mapping.userMapper.selectUser";
  List<User> userList = session.selectList(stateselect);
  for(int i=0;i<userList.size();i++) {
      System.out.println(userList.get(i));
  }

 

②删除指定user记录

  🍟userMapper.xml配置

 <delete id="deleteUser" parameterType="int">
     delete from S_user where _key=#{_key}  
 </delete>

 

  🌭测试java代码

 

    String statementdl = "com.springdemo.mapping.userMapper.deleteUser";    
    try {         
        session.delete(statementdl,4);        
        session.commit();
     } catch (Exception e) {
        e.printStackTrace();
        session.rollback();
     }

 

 

🌂更新user表记录

  🍿userMapper.xml配置

<update id="updateUser" >
      update S_user set userPwd=#{userName},userPwd=#{userPwd},userPower=#{userPower} where _key=#{_key}
</update>

  🥓测试java代码

 

     String statementup = "com.springdemo.mapping.userMapper.updateUser";
     User userup = new User("wqyx","wqyx", "hhh","超级");
     userup.set_key(2);
     try {         
         session.update(statementup, userup);        
         session.commit();
     } catch (Exception e) {
         e.printStackTrace();
         session.rollback();
     }

 

 

④新增user表记录

  🍿userMapper.xml配置

<insert id="insertUser" useGeneratedKeys="true" keyProperty="_key">
        insert into S_USER (userId,userName,userPwd,userPower) values (#{userId},#{userName},#{userPwd},#{userPower})
</insert>

  🥓测试java代码

 

  String statementIn = "com.springdemo.mapping.userMapper.insertUser";
  User userin = new User("wll","wll", "123456","7000");
  try {         
       session.insert(statementIn,userin);        
       session.commit();
  } catch (Exception e) {
       e.printStackTrace();
       session.rollback();
  }

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值