标签:
1、使用工具类及其配置文件的方法,连接后台的数据库
【优点:可以连接不同的数据库,对数据库的类型进行了逐一的设置】
【缺点:对数据库操作的sql语句的编写,比较单一,当进行数据库表操作时,sql语句需要写在相应的方法内,当出错时,改起来不好找,比较麻烦】
init.properties数据库的相关属性对象的配置
ip=127.0.0.1 //ip地址 port=1433 //端口号 dbtype=sqlServer //数据库类型 dbname=fdx //数据库名 username=sa //用户名 password=abc1234565 //密码
DBUtils工具类【连接数据库的工具包】
package com.fdx.Utils; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class DBUtils { private static Properties p = new Properties(); static{ try { p.load(DBUtils.class.getResourceAsStream("init.properties")); } catch (IOException e) { // TODO Auto-generated catch block System.out.println("没有找到配置文件"); } } //创建连接数据库连接 public static Connection getConnection() { Connection conn = null; String ip = p.getProperty("ip").trim().toLowerCase(); String port = p.getProperty("port").trim().toLowerCase(); String dbname = p.getProperty("dbname").trim().toLowerCase(); String dbtype = p.getProperty("dbtype").trim().toLowerCase(); String username = p.getProperty("username").trim().toLowerCase(); String password = p.getProperty("password").trim().toLowerCase();
/**
*根据dbtype的不同,选择不同的数据库类型
*
/
if (dbtype.equals("oracle")) {//连接Oracle数据库 try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (ClassNotFoundException e) { System.out.println("驱动类没找到"+e.getMessage()); } //获取连接对象 StringBuffer url = new StringBuffer(); url.append("jdbc:oracle:thin:@"); url.append(ip); url.append(":"); url.append(port); url.append(":"); url.append(dbname); try { conn= DriverManager.getConnection(url.toString(),username,password); } catch (SQLException e) { System.out.println("数据库连接项错误"); } } if (dbtype.equals("mysql")) {//连接MySQL数据库
//MySql数据库的url是这个样子的:
//jdbc:mysql://localhost:3306/mysql?characterEncoding=utf8
try { Class.forName("org.gjt.mm.mysql.Driver"); } catch (ClassNotFoundException e) { System.out.println("驱动类没找到"+e.getMessage()); } //获取连接对象 StringBuffer url = new StringBuffer(); url.append("jdbc:mysql://"); url.append(ip); url.append(":"); url.append(port); url.append("/"); url.append(dbname); try { conn= DriverManager.getConnection(url.toString(),username,password); } catch (SQLException e) { System.out.println("数据库连接项错误"); }
} if (dbtype.equals("sqlserver")) {
//连接SqlServer数据库,url路径格式是一定的:jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=fdx,
//其中端口号后面必须使用分号,使用其他的是行不通的 try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); } catch (ClassNotFoundException e) { System.out.println("驱动类没找到"+e.getMessage()); } //获取连接对象 StringBuffer url = new StringBuffer(); url.append("jdbc:sqlserver://"); url.append(ip); url.append(":"); url.append(port); url.append(";");
url.append("DatabaseName="); url.append(dbname); try { conn= DriverManager.getConnection(url.toString(),username,password); } catch (SQLException e) { System.out.println("数据库连接项错误"); } } return conn; } //关闭数据库中的连接对象 public static void close(Connection conn,PreparedStatement pstat,ResultSet rs){ if(conn != null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(pstat != null){ try { pstat.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(rs != null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
方法二:使用Spring+iBatis框架的方式,专门有一个XXXsqlMap.xml配置文件,专门放sql语句的文件,设计到sql语句的方法中,直接调用即可【自己测试的有dao接口,其中的方法名要与sqlMap中的sql语句的id值相一致的,这样子才可以与后台数据库建立联系;】
--------{实体类、实体类sqlMap配置文件,都可以直接生成出来的,具体直接生成的方式,待续中,,,,,}
连接数据库的属性对象配置文件config.properties
driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver validationQuery=SELECT 1 jdbc_url=jdbc:sqlserver://127.0.0.1:1433;DatabaseName=fdx jdbc_username=sa jdbc_password=abc123456
然后再在spring-mybatis.xml配置文件中,配置有关连接数据库的相关信息【即数据源】
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> <property name="driverClassName" value="${driverClassName}"></property> <property name="url" value="${jdbc_url}" /> <property name="username" value="${jdbc_username}" /> <property name="password" value="${jdbc_password}" />
......
在相应的sqlMap配置文件中配置有关的sql语句
......
dao接口中,方法名要与sqlMap配置文件中的sql的id值相一致的【切记】
比如:
public interface UserDao { // 根据id查询用户信息(ok) public User selectByPrimaryKey(String id); // 查询所有信息(ok) public List<User> getAll(); // 查询最大id值(ok) public String selectMaxId(); // 删除用户信息【根据id】(ok) public void deleteByPrimaryKey(String id); // 插入用户信息(ok) public void insert(User user); // 有选择性的插入操作(ok) public void insertSelective(User user);
service业务逻辑接口
public interface UserService { public User getUserById(String id);//(ok) // public void deleteById(String id);//(ok) public void insertUser(User user);//(ok) public List<User> getAllUser();//(ok) // public void update(User user);//(ok)根据id修改用户密码,姓名,角色,生日 public void insertSelect(User user);//选择性的插入操作(ok)
serviceImpl实现类
package fdx.service; import java.util.Date; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import fdx.dao.UserDao; import fdx.model.User; import fdx.service.UserService; @Service("userService") public class UserServiceImpl implements UserService { private UserDao userDao; public UserDao getUserDao() { return userDao; } @Autowired public void setUserDao(UserDao userDao) { this.userDao = userDao; } //根据id查询用户信息(ok) public User getUserById(String id) { return userDao.selectByPrimaryKey(id); } //根据id删除用户信息 public void deleteById(String id) { System.out.println("删除用户id"+id); System.out.println("用户信息的名字:"+userDao.selectByPrimaryKey(id).getName()); userDao.deleteByPrimaryKey(id); System.out.println("已删除成功!!"); } //插入用户信息,主键自动增长(ok) public void insertUser(User user) { //调用方法,获取到最大的id值 String id = userDao.selectMaxId(); System.out.println("获取到的最大id值:"+id); int num = Integer.parseInt(id.trim());//再没有trim()方法时,出现异常;Integer.parseInt(str),参数只能是纯数字的组合才能转换,所以使用trim()方法,进行去除一下空格;且得到的id值里面有空格的存在; num = num +1; //将数字转换成字符串格式 String sid = String.valueOf(num); //对主键id,出生日期(获取到当前系统的日期)进行设置; user.setId(sid); user.setBirth(new Date()); userDao.insert(user); System.out.println("插入之后:测试成功"); } //查询所有用户信息(ok) public List<User> getAllUser() { List<User> list = null; list = userDao.getAll(); return list; } }
进行JUnit测试【模块式的测试方式】
package fdx.test; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import org.junit.Test; import org.junit.runner.Request; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import sun.applet.Main; import fdx.model.User; import fdx.service.UserService; public class TestMy { @Test public void test(){ ApplicationContext ac = new ClassPathXmlApplicationContext(new String[] { "spring.xml", "spring-mybatis.xml"}); UserService us = (UserService) ac.getBean("userService"); //根据id查询用户 // System.out.println(us); User u = us.getUserById("1002"); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); System.out.println(u.getId()+u.getName()+u.getPwd()+sf.format(u.getBirth())); } }
其中spring.xml配置文件中相应的内容:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "> <!-- 引入属性文件,用于连接数据库、classpath表示的是src/main/resources目录下 --> <context:property-placeholder location="classpath:config.properties" /> <!-- 自动扫描(自动注入) ,扫描相应的service包--> <context:component-scan base-package="fdx.service" /> <context:annotation-config/> </beans>
得到的结果是:
1002 hahah 000000 2015-09-24
【接触到的项目,使用的也是SSI框架,其中与数据库的连接,对后台数据库进行的操作,也是使用的sqlMap配置文件配置sql语句,然而不同的是,她们封装好的类用来获取sqlMap中sql的id值,进而得到相应的sql语句,直接调用类中的方法就可以得到想要的sql语句。,进而实现对后台数据库进行相应的操作!!!】
标签:
原文地址:http://www.cnblogs.com/FanSunny/p/4883090.html