2021-04-14

MyBitas工程搭建

JDBC连接及操作数据库

  1. 注册驱动
  2.  建立连接  
    
  3.  创建执行sql语句的对象  
    
  4.  执行语句  
    
  5.  处理执行结果  
    
  6.  释放资源 
    
  7. 下面进行详解:
  8. 1. 注册驱动
  9. 常用的有3种方式:   1) 直接注册驱动: DriverManager.registerDriver(com.mysql.jdbc.Driver);这种方式要求程序首先要引入驱动包,否则无法通过编译。而且它可能会造成DriverManager中产生两个一样的驱动,并对具体的驱动类产生依赖,所以不推荐使用。   2) 键值对方式: System.setProperty(“jdbc.drivers”,”com.mysql.jdbc.Driver”);同时注册多个驱动则用冒号隔开。这种方式如果事先不引入驱动包的情况下能通过编译(因为操作的都为字符串,运行时肯定不行啦),所以虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用。  3) Class.forName方式(类似反射):  Class.forName(“com.mysql.jdbc.Driver”); Class.forName函数的作用是根据类的名字将类装载到虚拟机中(并未实例化);这种方式也不会对具体的驱动类产生依赖,而且使用很方便,所以推荐使用。  2. 建立连接   Connection conn=DriverManager.getConnection(url,uid,pwd);   url格式:JDBC:子协议:子名称//主机名:端口/数据库名?key=value&…     例如:jdbc:mysql://localhost:8086/jdbc;uid和pwd也可以用key=value的方式告诉数据库。      其它参数:如,userUnicode=true&characterEncoding=gbk  3. 创建执行sql语句的对象   这里有两个对象可以使用:Statement、PreparedStatement对象   一般来说有参数的sql操作都用PreparedStatement对象,因为它有防止sql注入等优点。两者的区别这里不多介绍,创建语句:(假设conn为数据库连接对象)   Statement st=conn.createStatement();   PreparedStatement ps=conn.prepareStatement(strSql);   可以看出在创建PreparedStatement对象时即需要指明要执行的sql语句,因为它会对sql语句进行预处理,例如进行一些防止sql注入的字符过滤等;而Statement则在执行sql动作时才指明sql语句。  4. 执行语句(CURD)   查询:st.executeQuery(strSql);或者ps. executeQuery();   非查询(增、删、改):st.executeUpdate(strSql);或ps.executeUpdate();  5. 处理执行结果   查询:返回值用ResultSet接收,例:ResultSet rs=st.executeQuery(strsql)   非查询(增、删、改):返回值为int  6. 释放资源   依次释放ResultSet、Statement(或PreparedStatement)、Connection对象,释放顺序与创建顺序相反(类似“栈”结构)

引入MyBatis依赖

  1. org.mybatis mybatis 3.4.6

编程式配置方法

创建 mybatis-config.xml 文件并将 mybatis 文档中的内容复制过来,并将数据库配置信息换成自己的: mybatis-config.xml 是总控制文件,EmployeeMapper.xml 是MyBatis的 sql映射文件,在里面也 sql 语句 所有的 sql映射文件都会写到总控文件中"http://mybatis.org/dtd/mybatis-3-config.dtd">

配置文件配置MyBatis

1、SqlMapConfig.xml是mybatis的全局配置文件,配置内容如下:properties(属性)settings(全局配置参数)typeAliases(类型别名)typeHandlers(类型处理器)objectFactory(对象工厂)plugins(插件)environments(环境集合属性对象)–environment(环境子属性对象)----transactionManager(事务管理)----dataSource(数据源)mappers(映射器)案例实操properties将数据库连接参数单独配置在db.properties中,放在类路径下。这样只需要在SqlMapConfig.xml中加载db.properties的属性值。这样在SqlMapConfig.xml中就不需要对数据库连接参数硬编码。将数据库连接参数只配置在db.properties中,原因:方便对参数进行统一管理,其它xml可以引用该db.properties。使用示例:其中的属性就可以在整个配置文件中使用来替换需要动态配置的属性值。比如:如何配?在config.xml 文件中引入子标签并修改原有数据源连接相关配置如下:即可完成。settings(了解)mybatis全局配置参数,全局参数将会影响mybatis的运行行为。比如:开启二级缓存、开启延迟加载。具体可配置情况如下:Mybatis配置文件配置的方式这是MyBatis 修改操作运行过程细节的重要的步骤。下方这个表格描述了这些设置项、含义和默认值。一般我们用默认即可(详细解释见官网文档)对应xml配置如下(开发中一般采用默认配置即可):3.typeAliases类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。例如:Configuration 标签下添加修改CustomerMapper.xml 文件 SELECT id,user_name ‘userName’ FROM yg_customer WHERE id=#{id} 也可以指定一个包名(大家最喜欢的方式),MyBatis 会在包名下面搜索需要的 Java Bean,比如: 每一个在包com.xxx.pojo 中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如com.xxx.pojo.Customer 的别名为customer ;若有注解,则别名为其注解值。 注解名@Alias(value=“user”)同样mybatis已经为我们构建了相应的类型别名,它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。别名映射的类型_byteByte_longLong_shortShort_intInt_integerInt_doubleDouble_floatFloat_booleanBooleanstringStringbyteBytelongLongshortShortintIntegerintegerIntegerdoubleDoublefloatFloatbooleanBooleandateDatedecimalBigDecimalbigdecimalBigDecimalobjectObjectmapMaphashmapHashMaplistListarraylistArrayListcollectionCollectioniteratorIterator4.typeHandlers 类型处理器(面试有可能会问)无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。下表描述了一些默认的类型处理器。BooleanTypeHandlerjava.lang.Boolean, boolean数据库兼容的 BOOLEANByteTypeHandlerjava.lang.Byte, byte数据库兼容的 NUMERIC 或 BYTEShortTypeHandlerjava.lang.Short, short数据库兼容的 NUMERIC 或 SHORT INTEGERIntegerTypeHandlerjava.lang.Integer, int数据库兼容的 NUMERIC 或 INTEGERLongTypeHandlerjava.lang.Long, long数据库兼容的 NUMERIC 或 LONG INTEGERFloatTypeHandlerjava.lang.Float, float数据库兼容的 NUMERIC 或 FLOATDoubleTypeHandlerjava.lang.Double, double数据库兼容的 NUMERIC 或 DOUBLEBigDecimalTypeHandlerjava.math.BigDecimal数据库兼容的 NUMERIC 或 DECIMALStringTypeHandlerjava.lang.StringCHAR, VARCHARClobReaderTypeHandlerjava.io.Reader-ClobTypeHandlerjava.lang.StringCLOB, LONGVARCHARNStringTypeHandlerjava.lang.StringNVARCHAR, NCHARNClobTypeHandlerjava.lang.StringNCLOBBlobInputStreamTypeHandlerjava.io.InputStream-ByteArrayTypeHandlerbyte[]数据库兼容的字节流类型BlobTypeHandlerbyte[]BLOB, LONGVARBINARYDateTypeHandlerjava.util.DateTIMESTAMPDateOnlyTypeHandlerjava.util.DateDATETimeOnlyTypeHandlerjava.util.DateTIMESqlTimestampTypeHandlerjava.sql.TimestampTIMESTAMPSqlDateTypeHandlerjava.sql.DateDATESqlTimeTypeHandlerjava.sql.TimeTIMEObjectTypeHandlerAnyOTHER 或未指定类型EnumTypeHandlerEnumeration TypeVARCHAR-任何兼容的字符串类型,存储枚举的名称(而不是索引)EnumOrdinalTypeHandlerEnumeration Type任何兼容的 NUMERIC 或 DOUBLE 类型,存储枚举的索引(而不是名称)。

Mybatis实现Mapper配置并查询数据

什么是Mapper

Mapper就是为了解决单表增删改查,基于Mybatis的插件。开发人员不需要编写SQL,不需要在DAO中增加方法,只要写好实体类,就能支持相应的增删改查方法。

注解方式使用Mapper

@Mapper
public interface UserMapper { @Insert(“insert into user(name) values(#{name})”) @Options(keyProperty=“id”,keyColumn=“id”,useGeneratedKeys=true) public void save(User user); }

XML方式使用Mapper

#加载Mybatis配置文件
mybatis.mapper-locations = classpath:mapper/Mapper.xmlmybatis.config-location = classpath:config/sqlMapConfig.xml #数据源必填项spring.datasource.driver-class-name= com.mysql.jdbc.Driverspring.datasource.url = jdbc:mysql://localhost:3306/study?useUnicode=true&characterEncoding=utf-8spring.datasource.username = rootspring.datasource.password = 123456 #选填# Number of ms to wait before throwing an exception if no connection is available.spring.datasource.tomcat.max-wait=10000# Maximum number of active connections that can be allocated from this pool at the same time.spring.datasource.tomcat.max-active=50# Validate the connection before borrowing it from the pool.spring.datasource.tomcat.test-on-borrow=true2:编写Mapper.Xml和sqlMapConfig.xmluserMapper.xml<?xml version="1.0" encoding="UTF-8"?> SELECT * FROM user sqlMapConfig.xml<?xml version="1.0" encoding="UTF-8" ?> 3:加maven依赖 org.mybatis.spring.boot mybatis-spring-boot-starter 1.3.2 mysql mysql-connector-java 4:编写实体类public class User implements Serializable { private static final long serialVersionUID = 1L; private int id;// id private String name;// 姓名 private int age;// 年龄 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return “User [id=” + id + “, name=” + name + “, age=” + age + “]”; } }5:编写mapperimport com.liujia.springdemo.entity.User; public interface UserMapper { /* * 获取所有的user对象 * * @return */ List getAll();}6:编写service层import java.util.List; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service; import com.liujia.springdemo.entity.User;import com.liujia.springdemo.mapper.UserMapper; @Servicepublic class UserService { @Autowired private UserMapper userMapper; public List getAll() { return userMapper.getAll(); };}7:编写Copntroller层import java.util.List; import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import com.liujia.springdemo.entity.User;import com.liujia.springdemo.service.UserService; @RestControllerpublic class UserController { @Autowired private UserService userService; @RequestMapping("/getallusers") public List getAllUsers() { return userService.getAll(); }}8:增加包扫描和运行程序@SpringBootApplication@MapperScan(basePackages = {“com.liujia.springdemo.mapper”})public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Bean public CommandLineRunner commandLineRunner(ApplicationContext ctx) { return args -> { System.out.println(“Let’s inspect the beans provided by Spring Boot:”); String[] beanNames = ctx.getBeanDefinitionNames(); Arrays.sort(beanNames); for (String beanName : beanNames) { System.out.println(beanName); } }; }}

select-resulttype

resultType是直接表示返回类型的,当提供的返回类型属性是resultType时,MyBatis会将Map里面的键值对取出赋给resultType所指定的对象对应的属性。所以其实MyBatis的每一个查询映射的返回类型都是ResultMap,只是当提供的返回类型属性是resultType的时候,MyBatis对自动的给把对应的值赋给resultType所指定对象的属性。

select-resultMap

属性说明
id属性 ,resultMap标签的标识。type属性 ,返回值的全限定类名,或类型别名。autoMapping属性 ,值范围true(默认值)|false, 设置是否启动自动映射功能,自动映射功能就是自动查找与字段名小写同名的属性名,并调用setter方法。而设置为false后,则需要在resultMap内明确注明映射关系才会调用对应的setter方法。
2、基本作用:建立SQL查询结果字段与实体属性的映射关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值