扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
一、不用纯jdbc的原因,即缺点。
在网站制作、成都网站建设过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。创新互联还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。1、数据库理解,使用时创建,不用时释放,会对数据库进行频繁的链接开启和关闭,造成数据库的资源浪费,影响数据库的性能。
设想:使用数据库的连接池。
2、将sql语句硬编码到java代码中,不利于系统维护。
设想:将sql放到配置文件中。
3、向preparedstatement中设置参数,对占位符位置和设置参数值,硬编码在Java代码中,不利于系统维护。
设想:将sql语句及占位符配置到xml中。
4、从resultset中便利结果集时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。
设想;将结果集,自动映射成Java对象
二、mybatis是什么
1、mybatis让程序员将主要精力放在sql上,通过mybatis提供的映射方式,自由灵活生成满足需要的sql语句。
2、mybatis可以将输入参数自动映射,可以将结果集映射为Java对象,并且sql相对自由,不想hibernate那样看不到sql。
3、mybatis需要一个SqlMapConfig.xml,它是mybatis的全局配置文件,其中包括了数据库连接池,配置了数据源、事务等。
4、还需要一个SQLMap配置文件,它配置了映射关系(配置sql语句),sql语句要写在这个配置文件里,其实就是配置了一个statement,避免了sql语句硬编码到Java源文件中。后面会详细介绍这个配置文件的使用。
5、SqlsessionFactory是mybatis中生成Sqlsession的工厂,操作数据库。
mybatis框架结构是把sql语句的映射文件加载到SQLMapConfig中去,然后SqlSessionFactory加载SQLMapConfig后生成SQLSession,SQLSession来执行Statement。
三、构建一个mybatis工程。
1.所需要的jar包
即需要下载mybatis包和数据库驱动包,可以从GitHub上下载mybatis,解压后里面有lib文件夹和一个mybatis的核心包,lib中得包是mybatis的依赖包
mybatis的下载
2.工程结构。
src中放源码,lib中放所依赖的jar包,config中放各种配置文件,config文件下的sqlmap包中放sql映射文件。lib和config文件夹创建好后要记得邮件选择build path->use a source folder
3.编写log4j.properties
# Global logging configuration log4j.rootLogger=DEBUG, stdout # MyBatis logging configuration... log4j.logger.org.mybatis.example.BlogMapper=TRACE # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
注意:开发时log4j.rootLogger=DEBUG,生产环境可以把DEBUG换成info
4.编写SqlMapConfig.xml
5.编写user.xml
insert into users(name,birthday,address,sex) values(#{name},#{birthday},#{address},#{sex}) select last_insert_id() delete from users where id=#{id} update users set name=#{name},address=#{address},birthday=#{birthday},sex=#{sex} where id=#{id}
这里共写了查询,插入,删除,更新四个sql语句,都用对应的标签包裹起来,每一个标签最后会映射为一个statement,标签中的属性id是此statement的唯一标示,以后再Java中就是通过这个id来调用的。parameterType表示输入参数,类似于在jdbc的预编译时为占位符赋值时的参数类型。
resultType是数据库返回结果对应的pojo类的类型。
6.创建一个实体类对应数据库,因为比较简单,此处不再给出代码
7.用Junit来测试。
package mt;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Test;import entity.Classes;import entity.users;public class FirstDemo { @Test public void findUserbyIdTest(){ try { String resource="SqlMapConfig.xml"; InputStream stream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession=sqlSessionFactory.openSession(); users u=sqlSession.selectOne("test.srarchByid", 1); System.out.println(u.getBirthday().toString()); sqlSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void findUserByName(){ try { String resource="SqlMapConfig.xml"; InputStream stream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession=sqlSessionFactory.openSession(); Listu=sqlSession.selectList("test.searchByName", "张"); sqlSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void insertUser(){ try { String resource="SqlMapConfig.xml"; InputStream stream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession=sqlSessionFactory.openSession(); users u=new users(); u.setName("王磊"); u.setSex("f"); u.setBirthday(new Date()); u.setAddress("上海"); sqlSession.insert("test.insertUser", u); System.out.println(u.getId()); sqlSession.commit(); sqlSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void deleteUser(){ try { String resource="SqlMapConfig.xml"; InputStream stream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession=sqlSessionFactory.openSession(); sqlSession.insert("test.deleteUser",2); sqlSession.commit(); sqlSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Test public void updateUser(){ try { String resource="SqlMapConfig.xml"; InputStream stream=Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(stream); SqlSession sqlSession=sqlSessionFactory.openSession(); users u=new users(); u.setId(3); u.setName("王磊"); u.setSex("f"); u.setBirthday(new Date()); u.setAddress("上海66666"); sqlSession.update("updateUser",u); System.out.println(u.getId()); sqlSession.commit(); sqlSession.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流